sql server的sysobjects表详解

SQL Server数据库的一切信息都保存在它的系统表格里。

在大多数情况下,对你最有用的两个列是Sysobjects.name和Sysobjects.xtype。

前面一个用来列出待考察对象的名字,而后一个用来定义对象的类型 sysobjects 在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。 

只有在 tempdb 内,每个临时对象才在该表中占一行。 

列名 数据类型 描述 
name sysname 对象名。 
Id int 对象标识号。 
xtype char(2) 对象类型。

1、对象名

对象名(name),可以是下列对象类型中的一种: 
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 保留。
仅限内部使用。 

2、对象类型

对象类型(xtype),Type是在6.0就有的,XType在7.0才出现: Type 对象类型。
可以是下列值之一: 
C = CHECK 约束 
D = 默认值或 DEFAULT 约束 
F = FOREIGN KEY 约束 
FN = 标量函数 
IF = 内嵌表函数 
K = PRIMARY KEY 或 UNIQUE 约束 
L = 日志 
P = 存储过程 
R = 规则 
RF = 复制筛选存储过程 
S = 系统表 
TF = 表函数 
TR = 触发器 
U = 用户表 
V = 视图 
X = 扩展存储过程 XType 对象类型。
可以是下列对象类型中的一种: 
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 = 扩展存储过程 


3、常见FAQ

1、问:object_id(N'中N'代表什么意思 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[text]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[text] 
答:N'' 代表 Unicode类型,National缩写。可以支持不同语种的对象名 


2、 问:select * from dbo.sysobjects where id = object_id(N'[dbo].[usertab]') and OBJECTPROPERTY(id, N'IsUserTable') = 1 这句中的object_id(N'[dbo].[usertab]')和OBJECTPROPERTY(id, N'IsUserTable') = 1 是什么意思? 
答:object_id(N'[dbo].[usertab]'):是得出系统给表usertab分配的唯一ID OBJECTPROPERTY(id, N'IsUserTable') = 1 该对象的属性是表类型的 objectproperty(id,property)函数的使用,
参考:http://www.cnblogs.com/greateast/archive/2007/07/31/837312.html 


3、 问: USE master SELECT * FROM ...sysobjects “...sysobjects”三个句点的前缀是什么意思?
答: 对数据库对象名的 Transact-SQL 引用可以是由四部分组成的名称,格式如下: [ server_name.[[database_name].[owner_name]. | database_name.[owner_name]. | owner_name.] ] object_name    当引用某个特定对象时,不必总是为 SQL Server 指定标识该对象的服务器、数据库和所有者。可以省略中间级节点,而使用句点表示这些位置。对象名的有效格式是: server.database.owner.object server.database..object server..owner.object server...object database.owner.object database..object owner.object 
例: 
1.找出所有用户表: select id,name,xtype,crdate from sysobjects where xtype='U' order by name; 或者 select id,name,xtype,crdate from sysobjects where objectproperty(id,N'IsUserTable')=1 order by name; 
2.找出所有存储过程 select id,name,xtype,crdate from sysobjects where xtype='P' order by name; 或者 select id,name,xtype,crdate from sysobjects where objectproperty(id,N'IsProcedure')=1 order by name;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值