学习使用master.dbo.spt_values表
如果要生成的临时表中有个连续的数字列,或者连续的日期列,如下所示:
2012-1-1
2012-1-2
2012-1-3
... ...
可以这样写:
declare @begin datetime,@end datetime
set @begin='2012-1-1'
set @end='2012-1-5'
declare @days int
set @days=DATEDIFF(dd,@begin,@end)
select DATEADD(dd,number,@begin)
from master.dbo.spt_values
where type='p' AND number<=@days
上面的语句中,@begin与@end可以认为是多外面传来的两个参数,我们要求这两个日期之间的日期序列。
当然,在看上面的代码之前最好先回顾一下master.dbo.spt_values表的数据。
select * from master.dbo.spt_values
我们使用了其中的type与number两列。
spt_values存储的是sybase的系统值。
master..spt_values相当于一个数字辅助表,在sql中主要用到number这个字段。
select number from master..spt_values where type='p'--这样查询一下就知道什么意思了主要作用就是取连续数字
不过有个缺陷就是只能取到2047
技术内幕系列丛书里面有介绍
网上找不到这个表结构所代表的含义,但从表的数据值来看,可以猜出一些来,比如,类型为B,那就应该是布尔型,它的名称和取值有四种,yes or no,no,yes,none.又如类型I似乎是与索引有关的一些数据名.你也可以通过名称及值的范围来猜出一些.
自然数序列0~2047的name为NULL,类型为p,猜不出这个p对应什么英文单词,或许在某个系统存储过程中要用它自然数序列,或许就是对应的这个存储过程名吧.
系统表中的东西,有些是要弄清楚的,而像spt_values这个表,联机丛书中都没有给出说明,那就是说它并不要求你知道它,我们只要知道能拿它来引用(比如类型p的数字序列)就足够了,而且,建议你不要试图去更改这个表的内容,否则可能会出现无法意料的后果.
如下一段:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
insert spt_values (name ,number ,type ,low ,high ,status) values (null ,0 ,'P ' ,1 ,0x00000001 ,0)insert spt_values (name ,number ,type ,low ,high ,status) values (null ,1 ,'P ' ,1 ,0x00000002 ,0)insert spt_values (name ,number ,type ,low ,high ,status) values (null ,2 ,'P ' ,1 ,0x00000004 ,0)insert spt_values (name ,number ,type ,low ,high ,status) values (null ,3 ,'P ' ,1 ,0x00000008 ,0)insert spt_values (name ,number ,type ,low ,high ,status) values (null ,4 ,'P ' ,1 ,0x00000010 ,0)insert spt_values (name ,number ,type ,low ,high ,status) values (null ,5 ,'P ' ,1 ,0x00000020 ,0)insert spt_values (name ,number ,type ,low ,high ,status) values (null ,6 ,'P ' ,1 ,0x00000040 ,0)insert spt_values (name ,number ,type ,low ,high ,status) values (null ,7 ,'P ' ,1 ,0x00000080 ,0)go-- 'P ' continued....declare @number_track integer ,@char_number_track varchar(12)select @number_track = 7select @char_number_track = convert(varchar,@number_track)-- max columns is 1024 so we need 1024 bit position rows;-- we'll actually insert entries for more than thatwhile @number_track < 1024 begin raiserror('type=''P '' ,@number_track=%d' ,0,1 ,@number_track) EXECUTE( ' insert spt_values (name ,number ,type ,low ,high ,status) select null ,(select max(c_val.number) from spt_values c_val where c_val.type = ''P '' and c_val.number between 0 and ' + @char_number_track + ' ) + a_val.number + 1 ,''P '' ,(select max(b_val.low) from spt_values b_val where b_val.type = ''P '' and b_val.number between 0 and ' + @char_number_track + ' ) + 1 + (a_val.number / 8) ,a_val.high ,0 from spt_values a_val where a_val.type = ''P '' and a_val.number between 0 and ' + @char_number_track + ' ') select @number_track = ((@number_track + 1) * 2) - 1 select @char_number_track = convert(varchar,@number_track) end --loopgo
|
master 是数据库名
spt_values是表名
我们可以在许多系统存储过程和函数的源代码中发现它的身影。其实可以将它理解成我们编程时常用的数据字典.
列名分别为名称、值、类型、下限、上限、状态;
类型列的取值含义:
D=Database Option P=Projection DBR=Database Role DC=Database Replication I=Index L=Locks V=Device Type
因为比较多,无法一一列举。其中类型P较为特殊,它只是0-2047(与版本有关)之间的数字的简单列表,作为对所有类型之间关系的预测。
select number from master..spt_values with(nolock) where type='P' /**解释:master..spt_values表的字段值为P的对应number字段值是从0-2047*/
select MONTH(convert(varchar(10), dateadd(MONTH, number - 1,
DATEADD(yy,DATEDIFF(yy,0,getdate()),0)), 120)) as yue from master.dbo.spt_values WHERE
type='P' AND number <= datediff(MONTH, DATEADD(yy,DATEDIFF(yy,0,getdate()),0),
dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1,0)) ) + 1 AND number>0
select * from master.dbo.spt_values where type='p'
select number from master..spt_values with(nolock) where type='P'
学习使用master.dbo.spt_values表的更多相关文章
- 对日期 ,和 master.dbo.spt_values 表操作
if object_id('tempdb..#xs') is not null drop table #xs; ), date datetime, sale float) insert into #x ...
- 利用Master库spt_values表 连续数字
SELECT CONVERT ( ), dateadd(d, number, GETDATE()), ) AS every_time FROM master..spt_values n WHERE n ...
- master.dbo.spt_values
,@date)) /*day--------------------200911012009110220091103200911042009110520091106200911072009110820 ...
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...
- 系统spt_values表--生成时间方便left join
时间处理我给你提供一个思路 系统有个spt_values表,可以构造一整个月的日期,然后左连接你统计好的数据,用CTE表构造多次查询 spt_values的超级经典的应用 http://www. ...
- Django学习笔记(五)—— 表单
疯狂的暑假学习之 Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path ...
- ABP框架源码学习之修改默认数据库表前缀或表名称
ABP框架源码学习之修改默认数据库表前缀或表名称 1,源码 namespace Abp.Zero.EntityFramework { /// <summary> /// Extension ...
- SQL Server ->> 调用系统内建扩展存储过程"master.dbo.xp_delete_file"删除过期备份文件
DECLARE @oldDate DATETIME SET @oldDate = GETDATE()-30 EXECUTE MASTER.dbo.xp_delete_file 0, N'D:\back ...
- ng2 学习笔记(二)表单及表单验证
在上一篇文章中提到了表单,只说了表单的数据绑定,这一篇文章主要讲一下表单验证,为什么把表单单独拿出来学习,主要是因为,表单是商业应用的支柱,我们用它来执行登录.求助.下单.预订机票.安排会议,以及不计 ...
随机推荐
- 在ubuntu下面为php添加redis扩展
首先下载redis扩展:wget https://github.com/nicolasff/phpredis/zipball/master -o php-redis.zip 解压缩:unzip php ...
- C - 你经历过绝望吗?两次! 【地图型BFS+优先队列(障碍物)】
4月16日,日本熊本地区强震后,受灾严重的阿苏市一养猪场倒塌,幸运的是,猪圈里很多头猪依然坚强存活.当地15名消防员耗时一天解救围困的“猪坚强”.不过与在废墟中靠吃木炭饮雨水存活36天的中国汶川“猪坚 ...
- 循环节(BFS)
循环节 时间限制: 1 Sec 内存限制: 64 MB提交: 56 解决: 16[提交][状态][讨论版] 题目描述 第一节是英语课.今天,老师又教了桐桐很多单词.桐桐发现所有单词都有循环节(大写 ...
- POJ 2115 C Looooops(Exgcd)
[题目链接] http://poj.org/problem?id=2115 [题目大意] 求for (variable = A; variable != B; variable += C)的循环次数, ...
- lua 脚本之高级篇 (面向对象的完全支持),有性能问题。
---------------------------------------------------------- --面向对象核心库 ------------------------------- ...
- [OpenJudge8782][划分DP]乘积最大
乘积最大 总时间限制: 1000ms 内存限制: 65536kB [描述] 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛, ...
- FindFirstVolume系列函数遍历驱动器,获取驱动器信息
什么是“卷”?卷,又称为“逻辑驱动器”,是 NTFS, FAT32 等文件系统组织结构的最高层.卷是存储设备(如硬盘)上由文件系统管理的一块区域,是在逻辑上相互隔离的存储单元.一个磁盘分区至少包含一个 ...
- 使用原生JS进行字符串转对象
字符串转对象 目的 工作中如果需要原生 JS 完成字符转对象的话可以通过 JSON.parse(str), 但是这个方法是ES5中才出现, 如果需要兼容低版本就需要其它方法 使用原生 JS 解决字符串 ...
- css自动换行与不换行
1.自动换行 div{ word-wrap: break-word; word-break: normal; } 2.不换行 div{ white-space:nowrap; } 3.浮动效果不换行 ...
- npm install -S -D -g 有什么区别
npm install module_name -S 即 npm install module_name --save 写入dependencies npm install modu ...