SQL Server系统表sysobjects介绍与使用

SQL Server系统表sysobjects介绍与使用

转载自:https://www.cnblogs.com/atree/p/SQL-Server-sysobjects.html

  关于SQL Server数据库的一切信息都保存在它的系统表格里。我怀疑你是否花过比较多的时间来检查系统表格,因为你总是忙于用户表格。但是,你可能需要偶尔做一点不同寻常的事,例如数据库所有的触发器。你可以一个一个地检查表格,但是如果你有500个表格的话,这可能会消耗相当大的人工。

  这就让sysobjects表格有了用武之地。虽然我不建议你更新这个表格,但是你当然有权对其进行审查。

  sysobjects 表 
  在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。

  sysobjects 表结构:

列名数据类型描述
namesysname对象名,常用列
idint对象标识号
xtypechar(2)对象类型。常用列。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 = 扩展存储过程
uidsmallint所有者用户对象编号
infosmallint保留。仅限内部使用
statusint保留。仅限内部使用
base_schema_ verint保留。仅限内部使用
 replinfo int保留。供复制使用
 parent_obj int 父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID)。
 crdate datetime 对象的创建日期。
 ftcatid smallint 为全文索引注册的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0
 schema_ver int 版本号,该版本号在每次表的架构更改时都增加。
 stats_schema_ ver int 保留。仅限内部使用。
typechar(2)  对象类型。可以是下列值之一: 
 C = CHECK 约束   D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 
 FN = 标量函数 IF = 内嵌表函数  K = PRIMARY KEY 或 UNIQUE 约束 
 L = 日志 P = 存储过程 R = 规则  RF = 复制筛选存储过程 
S = 系统表  TF = 表函数 TR = 触发器 U = 用户表 V = 视图 X = 扩展存储过程
 userstatsmallint  保留。
 sysstatsmallint  内部状态信息
 indexdel smallint 保留
 refdate datetime 留用
 versionint  保留
deltrig int  保留
 instrigint  保留
 updtrigint  保留
 seltrigint  保留
 category int 用于发布、约束和标识
 cachesmallint  保留

 

你可以用下面的命令列出感兴趣的所有对象:

SELECT * FROM sysobjects WHERE xtype = <type of interest>
--例如:查看视图
SELECT * FROM sysobjects WHERE xtype = 'V'

判断数据库中是否已经存在某个表,有的话就删除该表

复制代码
--方法一:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[表名]

--方法二:
if exists (select * from sysobjects where id = object_id(N'表名') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[表名]

--方法三:
if(Exists(Select * From SysObjects Where xtype='U' And Name='表名')) 
drop table [dbo].[表名]
复制代码

以后继续补充。

某些朋友的一些疑问:

1、问:object_id(N'表名')中N'代表什么意思?

答:N'' 代表 Unicode类型.可以支持不同语种的对象名

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)函数的使用,

3、 问:USE master SELECT * FROM ...SysObjects ” ...sysobjects ” -- 三个句点的前缀是什么意思?

答:对数据库对象名的 Transact-SQL 引用可以是由四部分组成的名称,格式如下:[ server_name.[[database_name].[owner_name]. | database_name.[owner_name]. | owner_name.] ] object_name

未完待续(XX尚未成功,后面要靠大家了)……

4、 问:查询某个表被哪些视图/存储过程使用(仅替换TableName即可

SELECT OBJECT_NAME(id) FROM syscomments 
WHERE id IN(SELECT object_id FROM sys.objects WHERE type='P') AND text LIKE '%TableName%' 

5、 查询各个表的Data数

SELECT A.name AS '表名',MAX(B.rows) AS '记录数' 
FROM sysobjects A  
     INNER JOIN sysindexes B 
     ON A.id = B.id 
WHERE A.xtype='u'
GROUP BY A.name
ORDER BY MAX(B.rows) DESC

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页