理解SQL Server系统表sysobjects

本文介绍了如何利用SQL Server的系统表格sysobjects和系统视图INFORMATION_SCHEMA.TABLES查询数据库对象,包括触发器、存储过程等,并提供了具体的SQL查询示例。
关于SQL Server数据库的一切信息都保存在它的系统表格里。我怀疑你是否花过比较多的时间来检查系统表格,因为你总是忙于用户表格。但是,你可能需要偶尔做一点不同寻常的事,例如数据库所有的触发器。你可以一个一个地检查表格,但是如果你有500个表格的话,这可能会消耗相当大的人工。
  这就让sysobjects表格有了用武之地。虽然我不建议你更新这个表格,但是你当然有权对其进行审查。
  在大多数情况下,对你最有用的两个列是sysobjects.name和sysobjects.xtype。前面一个用来列出待考察对象的名字,而后一个  用来定义对象的类型,其代码如下:
• C:检查约束。
• D:默认的约束
• F:外键约束
• L:日志
• P:存储过程
• PK:主键约束
• RF:复制过滤存储过程
• S:系统表格
• TR:触发器
• U:用于表格。
• UQ:独特的约束。
• V:视图
• X:被扩展的存储过程
  在碰到触发器的情形下,用来识别触发器类型的其他三个列是:deltrig、instrig和uptrig。
  你可以用下面的命令列出感兴趣的所有对象:
SELECT * FROM sysobjects WHERE xtype = <type of interest>
  在特殊情况下,也就是在父表格拥有触发器的情况下,你可能想要用下面这样的代码查找数据库:
SELECT
      Sys2.[name] TableName,
      Sys1.[name] TriggerName,
      CASE
            WHEN Sys1.deltrig > 0 THEN'Delete'
            WHEN Sys1.instrig > 0 THEN'Insert'
            WHEN Sys1.updtrig > 0 THEN'Update'
      END'TriggerType'
FROM
      sysobjects Sys1 JOIN sysobjects Sys2 ON Sys1.parent_obj = Sys2.[id]
WHERE Sys1.xtype='TR'
ORDERBY TableName
  在SQL Server 2005里,首选的技术是使用系统视图。这种方式会把你的查询同微软选择对系统表格进行的任何改变隔绝开来。
  下面是一个简单的例子,它使用了INFORMATION_SCHEMA_TABLES视图:
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE
FROMINFORMATION_SCHEMA.TABLES
ORDERBY TABLE_SCHEMA, TABLE_NAME
  对于AdventureWorks数据库或者任何你自己的数据库,使用这个查询可以产生一个表格快速列表。
  为了说明这些架构查询的能力,看下面的语句,它们列出所选数据库里所有的函数和存储过程。
SELECT*FROMINFORMATION_SCHEMA.ROUTINES
ORDERBY ROUTINE_TYPE, ROUTINE_NAME
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值