您的位置:首页 > 移动开发 > Objective-C

认识SQLSERVER中sysobjects表

2015-12-20 14:20 543 查看
sysobjects表: sysobjects 是SQLSERVER中的系统对象表,保存系统中的当前所有对象,包括表、存储过程、视图、主键、外键、约束等

通过sql查询sysobjects ,并没有排序,查询结果i默认通过id排序

sysobjects 有几个比较重要的字段

name:  object名称

id:  object id,从查询结构看id字段应该是主键,不重复

xtype:  object类型

uid: object所有者id

继续查看后面的查询结果

观察到xtype不在是S,下面介绍一下xtype的多种值

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

FN = 标量函数

IF = 内嵌表函数

PK = PRIMARY KEY

L = 日志

P = 存储过程

R = 规则

RF = 复制筛选存储过程

S = 系统表

TF = 表函数

TR = 触发器

U = 用户表

V = 视图

X = 扩展存储过程

AF = 聚合函数 (CLR)

FS = 程序集 (CLR) 标量函数

FT = 程序集 (CLR) 表值函数

IF = 内联表函数

IT = 内部表

PC = 程序集 (CLR) 存储过程

PK = PRIMARY KEY 约束

SN = 同义词

SQ = 服务队列

TA = 程序集 (CLR) DML 触发器

TT = 表类型

UQ = UNIQUE 约束
我觉得需要记住的类型为

P = 存储过程  S=系统表  U=用户表  TR=触发器 

从查询结果看出系统表的uid 4,用户表的uid为1,而表中并没有id为1、4的行数据,可以理解系统自动隐藏了几个非常重要的id,并且它们并没有uid

观察到id的长度不在一位或者两位,已变成多位,可以猜想出非系统已内置的id都是类似于UUID,防止重复冲突

下面介绍下常用功能

 如果需要查询当前数据库中有多少张用户表,执行sql: SELECT count(1) FROM sysobjects where xtype='U'

如果需要查询当前数据库是否已存在某张表,执行sql: select count(1) from sysobjects where name='表名'

如果需要新建表,且先判断当前数据库是否已存在,执行sql:

if not exists(select 1 from sys.objects where name='表名')

begin

CREATE TABLE [dbo].[表名](

[字段名1] [类型](长度) NULL,

[字段名2] [类型](长度 NULL,

       .........

) ON [PRIMARY]

end

go
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql sql server sysobjects