日期:2014-05-18  浏览次数:20480 次

master..spt_values表的作用是什么,几个字段的含义是什么,谁能讲讲呢?
master..spt_values表的作用是什么,几个字段的含义是什么,谁能讲讲呢?

SQL code

select *
from master..spt_values



我实在找不到,对这个表作用的说明文档。

------解决方案--------------------
master..spt_values相当于一个数字辅助表,在sql中主要用到number这个字段。
SQL code
select number from master..spt_values where type='p'
--这样查询一下就知道什么意思了

------解决方案--------------------
相对固定通用的取数字的表
主要作用就是取连续数字
不过有个缺陷就是只能取到2047

技术内幕系列丛书里面有介绍

------解决方案--------------------
这个表貌似是从DB2借用过来的,它存储了一些系统存储过程运行所需要的数据取值范围以前当前值,这个表共有名称,值,类型,最小,最大,状态等六个列,一个约束,一个聚集索引和一个非聚集索引.
网上找不到这个表结构所代表的含义,但从表的数据值来看,可以猜出一些来,比如,类型为B,那就应该是布尔型,它的名称和取值有四种,yes or no,no,yes,none.又如类型I似乎是与索引有关的一些数据名.你也可以通过名称及值的范围来猜出一些.
自然数序列0~2047的name为NULL,类型为p,猜不出这个p对应什么英文单词,或许在某个系统存储过程中要用它自然数序列,或许就是对应的这个存储过程名吧.
系统表中的东西,有些是要弄清楚的,而像spt_values这个表,联机丛书中都没有给出说明,那就是说它并不要求你知道它,我们只要知道能拿它来引用(比如类型p的数字序列)就足够了,而且,建议你不要试图去更改这个表的内容,否则可能会出现无法意料的后果.
------解决方案--------------------
我的sql2000也只有255
------解决方案--------------------
可以到安装文件里搜索 u_tables.sql 文件查看spt_values表注释情况

如下一段:

SQL code
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        = 7
select     @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 that
while @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 --loop
go

------解决方案--------------------
该表是从sybase继承过来的,是个内部字典表,供SQL Server内部使用。
我们可以在许多系统存储过程和函数的源代码中发现它的身影。其实可以将它理解成我们编程时常用的数据字典.

列名分别为名称、值、类型、下限、上限、状态;

类型列的取值含义:
D=Database Option P=Projection DBR=Database Role DC=Database Replication I=Index L=Locks V=Device Type