您的位置:首页 > 数据库

MS SQL SERVER 中的系统表

2014-04-05 21:11 417 查看
发现SQL Server 2000的数据库中没有以下表中的sys.extended_properties,但有dtproperties,(另外SQL Server 2000多一个sysfiles1),似乎缺乏[b]sys.extended_properties表,Yii 1.1.13 使用中出现错误。[/b]
在yii-1.1.13.e9e4a0/framework/db/CMssqlSchema.php的findColumns函数中,将


$sql="SELECT t1.*, columnproperty(object_id(t1.table_schema+'.'+t1.table_name), t1.column_name, 'IsIdentity') AS IsIdentity, ".

"CONVERT(VARCHAR, t2.value) AS Comment FROM ".$this->quoteTableName($columnsTable)." AS t1 ".

"LEFT OUTER JOIN sys.extended_properties AS t2 ON t1.ORDINAL_POSITION = t2.minor_id AND ".

"object_name(t2.major_id) = t1.TABLE_NAME AND t2.class=1 AND t2.class_desc='OBJECT_OR_COLUMN' AND t2.name='MS_Description' ".

"WHERE ".join(' AND ',$where);

修改为


$sql = "SELECT t1.*, columnproperty(object_id(t1.table_schema+'.'+t1.table_name), t1.column_name,

'IsIdentity') AS IsIdentity, 'commentvalue' as Comment ". "FROM ".$this->quoteTableName($columnsTable)." AS t1 ".

"WHERE ".join(' AND ',$where);


可以发现,gii能打开Model创建了,但不清楚是否会影响框架正常工作(似乎一部分系统表/视图也在gii的下拉列表显示了,这应该是个问题)。
换用SQL Server 2008后发现无此问题,说明Yii 1.1.13应该是针对SQL Server 2005、2008版本的


MS SQL SERVER 中的系统表
序号
名称
说明
备注
1
syscolumns
每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。
2
syscomments
包含每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的项。text 列包含原始 SQL 定义语句,其最大大小限制为 4 MB。
不应删除 syscomments 中的项。如果手工删除或修改 syscomments 中的项,则对应的存储过程将不能正常工作。若要隐藏或加密存储过程定义,请使用含有 ENCRYPTION 关键字的 Create PROCEDURE。
3
sysdepends
包含对象(视图、过程和触发器)与对象定义中包含的对象(表、视图和过程)之间的相关性信息。
4
sysfilegroups
数据库中的每个文件组在表中占一行。
在该表中至少有一项用于主文件组。
5
sysfiles
数据库中的每个文件在表中占一行。
该系统表是虚拟表,不能直接更新或修改。
6
sysforeignkeys
包含关于表定义中的 FOREIGN KEY 约束的信息。
7
sysfulltextcatalogs
包含关于表定义中的 FOREIGN KEY 约束的信息。
8
sysfulltextnotify
sysfulltextnotify 视图未在 SQL Server 2000 中记录,但仍可查询它。此视图在 SQL Server 2005 中已删除。
9
sysindexes
数据库中的每个索引和表在表中各占一行。
10
sysindexkeys
数据库中的每个索引和表在表中各占一行。
11
sysmembers
每个数据库角色成员在表中占一行。
12
sysobjects
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。
只有在 tempdb 内,每个临时对象才在该表中占一行。
13
syspermissions
包含有关对数据库内的用户、组和角色授予和拒绝的权限的信息。
14
sysproperties
包含表中列的说明描述信息。
15
sysprotects
包含有关已由 GRANT 和 DENY 语句应用于安全帐户的权限的信息。
16
sysreferences
包括 FOREIGN KEY 约束定义到所引用列的映射。
17
systypes
对于每种系统提供数据类型和用户定义数据类型,均包含一行信息。
这些是系统提供的数据类型及其 ID 号。
18
sysusers
数据库中每个 Microsoft? Windows 用户、Windows 组、Microsoft SQL Server? 用户或 SQL Server 角色在表中占一行。
19
sys.extended_properties
针对当前数据库中的每个扩展属性返回一行。
1.syscolumns表

列名
数据类型
描述
name
sysname
列名或过程参数的名称。
id
int
该列所属的表对象 ID,或与该参数关联的存储过程 ID。
xtype
tinyint
systypes 中的物理存储类型。
typestat
tinyint
仅限内部使用。
xusertype
smallint
扩展的用户定义数据类型 ID。
length
smallint
systypes 中的最大物理存储长度。
xprec
tinyint
仅限内部使用。
xscale
tinyint
仅限内部使用。
colid
smallint
列或参数 ID。
xoffset
smallint
仅限内部使用。
bitpos
tinyint
仅限内部使用。
reserved
tinyint
仅限内部使用。
colstat
smallint
仅限内部使用。
cdefault
int
该列的默认值 ID。
domain
int
该列的规则或 CHECK 约束 ID。
number
smallint
过程分组时(0 表示非过程项)的子过程号。
colorder
smallint
仅限内部使用。
autoval
varbinary(255)
仅限内部使用。
offset
smallint
该列所在行的偏移量;如果为负,表示可变长度行。
status
tinyint
用于描述列或参数属性的位图:

0x08 = 列允许空值。

0x10 = 当添加 varchar 或 varbinary 列时,ANSI 填充生效。保留 varchar 列的尾随空格,保留 varbinary 列的尾随零。

0x40 = 参数为 OUTPUT 参数。

0x80 = 列为标识列。
type
tinyint
systypes 中的物理存储类型。
usertype
smallint
systypes 中的用户定义数据类型 ID。
printfmt
varchar(255)
仅限内部使用。
prec
smallint
该列的精度级别。
scale
int
该列的小数位数。
iscomputed
int
表示是否已计算该列的标志:

0 = 未计算。

1 = 已计算。
isoutparam
int
表示该过程参数是否是输出参数:

1 = 真。

0 = 假。
isnullable
int
表示该列是否允许空值:

1 = 真。

0 = 假。
2.syscomments表
列名
数据类型
描述
id
int
该文本适用的对象 ID。
number
smallint
如果进行分组,则为过程分组内的号码。0 表示不是过程的项。
colid
smallint
超过 4,000 个字符的对象定义的行序列号。
status
smallint
仅限内部使用。
ctext
varbinary(8000)
SQL 定义语句的实际文本。
texttype
smallint
0 = 用户提供的注释。

1 = 系统提供的注释。

4 = 加密的注释。
language
smallint
仅限内部使用。
encrypted
bit
表示过程是否已加密。

0 = 未加密。

1 = 已加密。
compressed
bit
表示过程是否已压缩。

0 = 未压缩。

1 = 已压缩。
text
nvarchar(4000)
SQL 定义语句的实际文本。
3.sysdepends表
列名
数据类型
描述
id
int
对象 ID。
depid
int
相关对象 ID。
number
smallint
过程号。
depnumber
smallint
相关过程号。
status
smallint
内部状态信息。
depdbid
smallint
保留。
depsiteid
smallint
保留。
selall
bit
如果对象用在 Select * 语句中,则打开。
resultobj
bit
如果正在更新对象,则打开。
readobj
bit
如果正在读取对象,则打开。
4.sysfilegroups表
列名
数据类型
描述
groupid
smallint
每个数据库的唯一组标识号。
allocpolicy
smallint
保留。
status
int
0x8 = READ ONLY

0x10 = DEFAULT
groupname
sysname
文件组的名称。
5.sysfiles表
列名
数据类型
描述
fileid
smallint
每个数据库的唯一文件标识号。
groupid
smallint
文件组标识号。
size
int
文件大小(以 8 KB 页为单位)。
maxsize
int
最大文件大小(以 8 KB 页为单位)。0 值表示不增长,–1 值表示文件应一直增长到磁盘已满。
growth
int
数据库的增长大小。0 值表示不增长。根据状态的值,可以是页数或文件大小的百分比。如果 status 包含 0x100000,则 growth 是文件大小的百分比;否则,它是页数。
status
int
growth 值(以兆字节 (MB) 或千字节 (KB) 为单位)的状态位。

0x1 = 默认设备。

0x2 = 磁盘文件。

0x40 = 日志设备。

0x80 = 自上次备份后已写入文件。

0x4000 = 由 Create DATABASE 语句隐性创建的设备。

0x8000 = 在数据库创建过程中创建的设备。

0x100000 = 按百分比而不是按页数增长。
perf
int
保留。
name
nchar(128)
文件的逻辑名称。
filename
nchar(260)
物理设备的名称,包括文件的完整路径。
6.sysfiles1表
列名
数据类型
描述
status
int
growth 值(以兆字节 (MB) 或千字节 (KB) 为单位)的状态位。

0x1 = 默认设备。

0x2 = 磁盘文件。

0x40 = 日志设备。

0x80 = 自上次备份后已写入文件。

0x4000 = 由 Create DATABASE 语句隐性创建的设备。

0x8000 = 在数据库创建过程中创建的设备。

0x100000 = 按百分比而不是按页数增长。
fileid
smallint
每个数据库的唯一文件标识号。
name
nchar(128)
文件的逻辑名称。
filename
nchar(260)
物理设备的名称,包括文件的完整路径。
7.sysforeignkeys表
列名
数据类型
描述
constid
int
FOREIGN KEY 约束的 ID。
fkeyid
int
具有 FOREIGN KEY 约束的表对象 ID。
rkeyid
int
在 FOREIGN KEY 约束中引用的表对象 ID。
fkey
smallint
正在引用的列 ID。
rkey
smallint
已引用的列 ID。
keyno
smallint
该列在引用列列表中的位置。
8.sysfulltextcatalogs表
列名
数据类型
描述
ftcatid
smallint
全文目录的标识符。
name
sysname
用户提供的全文目录名。
status
smallint
保留;仅限内部使用。
path
nvarchar(260)
用户提供的根路径。NULL 值表示用户未提供路径,因而使用了默认(安装)路径。
9.sysindexes表
列名
数据类型
描述
id
int
表 ID(如果 indid = 0 或 255)。否则为索引所属表的 ID。
status
int
内部系统状态信息。
first
binary(6)
指向第一页或根页的指针。
indid
smallint
索引 ID:

1 = 聚集索引

>1 = 非聚集

255 = 具有 text 或 image 数据的表条目
root
binary(6)
如果 indid >= 1 和 < 255,root 是指向根页的指针。如果 indid = 0 或 indid = 255,root 是指向最后一页的指针。
minlen
smallint
最小行大小。
keycnt
smallint
键的数目。
groupid
smallint
在其上创建对象的文件组 ID。
dpages
int
如果 indid = 0 或 indid = 1,dpages 是已用数据页的计数。如果 indid = 255,其设置为 0。否则是已用索引页的计数。
reserved
int
如果 indid = 0 或 indid = 1,reserved 是分配给所有索引和表数据的页计数。如果 indid = 255,reserved 是分配给 text 或 image 数据的页计数。否则是分配给索引的页计数。
used
int
如果 indid = 0 或 indid = 1,used 是用于所有索引和表数据的总页数。如果 indid = 255,used 是用于 text 或 image 数据的页计数。否则是用于索引的页计数。
rowcnt
bigint
基于 indid = 0 和 indid = 1 的数据级行计数。如果 indid = 255,rowcnt 设置为 0。
rowmodctr
int
对自上次更新表的统计后插入、删除或更新行的总数进行计数。
xmaxlen
smallint
最大行大小。
maxirow
smallint
最大非叶索引行大小。
OrigFillFactor
tinyint
创建索引时使用的起始填充因子值。不保留该值;然而,如果需要重新创建索引但记不住当初使用的填充因子,则该值可能很有帮助。
reserved1
tinyint
保留。
reserved2
int
保留。
FirstIAM
binary(6)
保留。
impid
smallint
保留。索引实现标志。
lockflags
smallint
用于约束经过考虑的索引锁粒度。例如,对于本质上是只读的查找表,可以将其设置为仅进行表级锁定以使锁定成本减到最小。
pgmodctr
int
保留。
keys
varbinary(816)
组成索引键的列 ID 列表。
name
sysname
表名(如果 indid = 0 或 255)。否则为索引的名称。
statblob
image
统计 BLOB。
maxlen
int
保留。
rows
int
基于 indid = 0 和 indid = 1的数据级行数,该值对于 indid >1 重复。如果 indid = 255,rows 设置为 0。提供该列是为了向后兼容。
10.sysindexkeys表
列名
数据类型
描述
id
int
表 ID。
indid
smallint
索引 ID。
colid
smallint
列 ID。
keyno
smallint
该列在索引中的位置。
11.sysmembers表
列名
数据类型
描述
memberuid
smallint
角色成员的用户 ID。
groupuid
smallint
角色的用户 ID。
12.sysobjects表
列名
数据类型
描述
name
sysname
对象名。
Id
int
对象标识号。
xtype
char(2)
对象类型。可以是下列对象类型中的一种:

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

L = 日志

FN = 标量函数

IF = 内嵌表函数

P = 存储过程

PK = PRIMARY KEY 约束(类型是 K)

RF = 复制筛选存储过程

S = 系统表

TF = 表函数

TR = 触发器

U = 用户表

UQ = UNIQUE 约束(类型是 K)

V = 视图

X = 扩展存储过程
uid
smallint
所有者对象的用户 ID。
info
smallint
保留。仅限内部使用。
status
int
保留。仅限内部使用。
base_schema_ver
int
保留。仅限内部使用。
replinfo
int
保留。供复制使用。
parent_obj
int
父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID)。
crdate
datetime
对象的创建日期。
ftcatid
smallint
为全文索引注册的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0。
schema_ver
int
版本号,该版本号在每次表的架构更改时都增加。
stats_schema_ver
int
保留。仅限内部使用。
type
char(2)
对象类型。可以是下列值之一:

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

FN = 标量函数

IF = 内嵌表函数

K = PRIMARY KEY 或 UNIQUE 约束

L = 日志

P = 存储过程

R = 规则

RF = 复制筛选存储过程

S = 系统表

TF = 表函数

TR = 触发器

U = 用户表

V = 视图

X = 扩展存储过程
userstat
smallint
保留。
sysstat
smallint
内部状态信息。
indexdel
smallint
保留。
refdate
datetime
留作以后使用。
version
int
留作以后使用。
deltrig
int
保留。
instrig
int
保留。
updtrig
int
保留。
seltrig
int
保留。
category
int
用于发布、约束和标识。
cache
smallint
保留。
13.syspermissions表
列名
数据类型
描述
id
int
对象权限的对象 ID;0 表示语句权限。
grantee
smallint
受权限影响的用户、组或角色的 ID。
grantor
smallint
被授予或废除权限的用户、组或角色的 ID。
actadd
smallint
仅限内部使用。
actmod
smallint
仅限内部使用。
seladd
varbinary(4000)
仅限内部使用。
selmod
varbinary(4000)
仅限内部使用。
updadd
varbinary(4000)
仅限内部使用。
updmod
varbinary(4000)
仅限内部使用。
refadd
varbinary(4000)
仅限内部使用。
refmod
varbinary(4000)
仅限内部使用。
14.sysproperties表
列名
数据类型
描述
id
int
该列所属的表对象 ID,或与该参数关联的存储过程 ID。
colid
smallint
列或参数 ID。
type
tinyint
暂缺。
name
sysname
暂缺。
value
sql_variant
说明描述信息。
15.sysprotects表
列名
数据类型
描述
id
int
将这些权限应用于的对象 ID。
uid
smallint
将这些权限应用于的用户或组的 ID。
action
tinyint
可以有下列权限之一:

26 = REFERENCES

178 = Create FUNCTION

193 = Select

195 = Insert

196 = Delete

197 = Update

198 = Create TABLE

203 = Create DATABASE

207 = Create VIEW

222 = Create PROCEDURE

224 = EXECUTE

228 = BACKUP DATABASE

233 = Create DEFAULT

235 = BACKUP LOG

236 = Create RULE
protecttype
tinyint
可以有下列值:

204 = GRANT_W_GRANT

205 = GRANT

206 = REVOKE
columns
varbinary(4000)
将这些 Select 或 Update 权限应用于的列的位图。位 0 表示所有的列,位 1 表示权限应用于该列,NULL 表示没有信息。
grantor
smallint
发出 GRANT 或 REVOKE 权限的用户的用户 ID。
16.sysreferences表
列名
数据类型
描述
constid
int
FOREIGN KEY 约束的 ID。
fkeyid
int
引用表的 ID。
rkeyid
int
被引用表的 ID。
rkeyindid
smallint
涵盖被引用键列的被引用表上唯一索引的索引 ID。
keycnt
smallint
键中的列数。
forkeys
varbinary(32)
仅限内部使用。
refkeys
varbinary(32)
仅限内部使用。
fkeydbid
smallint
保留。
rkeydbid
smallint
保留。
fkey1
smallint
引用列的列 ID。
fkey2
smallint
引用列的列 ID。
fkey3
smallint
引用列的列 ID。
fkey4
smallint
引用列的列 ID。
fkey5
smallint
引用列的列 ID。
fkey6
smallint
引用列的列 ID。
fkey7
smallint
引用列的列 ID。
fkey8
smallint
引用列的列 ID。
fkey9
smallint
引用列的列 ID。
fkey10
smallint
引用列的列 ID。
fkey11
smallint
引用列的列 ID。
fkey12
smallint
引用列的列 ID。
fkey13
smallint
引用列的列 ID。
fkey14
smallint
引用列的列 ID。
fkey15
smallint
引用列的列 ID。
fkey16
smallint
引用列的列 ID。
rkey1
smallint
引用列的列 ID。
rkey2
smallint
引用列的列 ID。
rkey3
smallint
引用列的列 ID。
rkey4
smallint
引用列的列 ID。
rkey5
smallint
引用列的列 ID。
rkey6
smallint
引用列的列 ID。
rkey7
smallint
引用列的列 ID。
rkey8
smallint
引用列的列 ID。
rkey9
smallint
引用列的列 ID。
rkey10
smallint
引用列的列 ID。
rkey11
smallint
引用列的列 ID。
rkey12
smallint
引用列的列 ID。
rkey13
smallint
引用列的列 ID。
rkey14
smallint
引用列的列 ID。
rkey15
smallint
引用列的列 ID。
rkey16
smallint
引用列的列 ID。
17.systypes表
列名
数据类型
描述
name
sysname
数据类型名称。
xtype
tinyint
物理存储类型。
status
tinyint
仅限内部使用。
xusertype
smallint
扩展用户类型。
length
smallint
数据类型的物理长度。
xprec
tinyint
服务器所使用的内部精度。不能在查询中使用。
xscale
tinyint
服务器所使用的内部小数位数。不能在查询中使用。
tdefault
int
对此数据类型进行完整性检查的存储过程的 ID。
domain
int
对此数据类型进行完整性检查的存储过程的 ID。
uid
smallint
数据类型创建者的用户 ID。
reserved
smallint
仅限内部使用。
usertype
smallint
用户类型 ID。
variable
bit
可变长度数据类型为 1;否则为 0。
allownulls
bit
指出此数据类型的默认为空性。如果 Create 或 Alter TABLE 指定了为空性,那么该值将替代此数据类型的默认为空性。
type
tinyint
物理存储数据类型。
printfmt
varchar(255)
保留。
prec
smallint
此数据类型的精度级别。
scale
tinyint
此数据类型的小数位数(根据精度)。
18.sysusers表
列名
数据类型
描述
uid
smallint
用户 ID,在此数据库中是唯一的。1 是数据库所有者。
status
smallint
仅限内部使用。
name
sysname
用户名或组名,在此数据库中是唯一的。
sid
varbinary(85)
此条目的安全性标识符。
roles
varbinary(2048)
仅限内部使用。
createdate
datetime
帐户的添加日期。
updatedate
datetime
帐户的上次修改日期。
altuid
smallint
仅限内部使用。
password
varbinary(256)
仅限内部使用。
gid
smallint
此用户所属的组 ID。如果 uid = gid,那么此条目就定义一个组。
environ
varchar(255)
保留。
hasdbaccess
int
如果该帐户有数据库访问权限,则为 1。
islogin
int
如果该帐户是有登录帐户的 Windows 组、Windows 用户或 SQL Server 用户,则为 1。
isntname
int
如果该帐户是 Windows 组或 Windows 用户,则为 1。
isntgroup
int
如果该帐户是 Windows 组,则为 1。
isntuser
int
如果该帐户是 Windows 用户,则为 1。
issqluser
int
如果该帐户是 SQL Server 用户,则为 1。
isaliased
int
如果该帐户以另一个用户为别名,则为 1。
issqlrole
int
如果该帐户是 SQL Server 角色,则为 1。
isapprole
int
如果该帐户是应用程序角色,则为 1。
19. extended_properties表
列名
数据类型
描述
class
tinyint
标识其上存在属性的项类。可以是下列值之一:
0 = 数据库
1 = 对象或列
2 = 参数
3 = 架构
4 = 数据库主体
5 = 程序集
6 = 类型
7 = 索引
10 = XML 架构集合
15 = 消息类型
16 = 服务约定
17 = 服务
18 = 远程服务绑定
19 = 路由
20 = 数据空间(文件组或分区方案)
21 = 分区函数
22 = 数据库文件
27 = 计划指南
class_desc
nvarchar(60)
其上存在扩展属性的类的说明。可以是下列值之一:
DATABASE
OBJECT_OR_COLUMN
PARAMETER
SCHEMA
DATABASE_PRINCIPAL
ASSEMBLY
TYPE
INDEX
XML_SCHEMA_COLLECTION
MESSAGE_TYPE
SERVICE_CONTRACT
SERVICE
REMOTE_SERVICE_BINDING
ROUTE
DATASPACE
PARTITION_FUNCTION
DATABASE_FILE
PLAN_GUIDE
major_id
int
其上存在扩展属性的项 ID,根据项类进行解释。对于大多数项,该 ID 适用于类所表示的项。下列是非标准主 ID 的解释:
如果 class 为 0,则 major_id 始终为 0。
如果 class 为 1、2 或 7,则 major_id 为 object_id。
minor_id
int
其上存在扩展属性的项辅助 ID,根据项类进行解释。对于大多数项,ID 为 0;否则,ID 为下列值之一:
如果 class = 1,则 minor_id 在项为列的情况下等于 column_id,在项为对象的情况下等于 0。
如果 class = 2,则 minor_id 为 parameter_id。
如果 class = 7,则 minor _id 为 index_id。
name
sysname
属性名,其 class、major_id 和 minor_id 是唯一的。
value
sql_variant
扩展属性的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: