认识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查询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 作业批量停止
- 结束SQL阻塞的进程
- 动态生成SQL Server视图作业
- SQL Server 语句操纵数据库
- SQL(结构化查询语句)
- oracle sql日期比较
- linux快速部署mysql服务器
- sql 存储过程分页
- 在WINXP系统上安装SQL Server企业版的方法
- 通过批处理调用SQL的方法(osql)
- SQL Server 存储过程的分页
- ASP程序与SQL存储过程结合使用详解
- SQL SERVER编写存储过程小工具
- 防御SQL注入攻击时需要注意的一个问题
- PostgreSQL教程(十九):SQL语言函数
- SQL Server复制需要有实际的服务器名称才能连接到服务器
- SQL Server 2000向SQL Server 2008 R2推送数据图文教程