第四节
系统存储过程、系统表 4.1
系统存储过程
系统存储过程是SQLServer内置的具有强大功能的存储过程,系统存储过程一般都是以SP_开始的,应尽可能利用已有的系统存储过程来实现操作目标(可以将系统存储过程简单的理解为是SQLServer的辅助工具)。
以下列出一些比较常用的系统存储过程: 系统存储过程的名字 | 作用 | sp_attach_db | 将数据库附加到服务器 | sp_attach_single_file_db | 将只有一个数据文件(就是以.mdf为扩展名的文件)的数据库附加到当前服务器 | sp_detach_db | 从服务器分离数据库 | sp_helptext | 显示规则、默认值、未加密的存储过程、用户定义函数、触发器或视图的文本 | sp_executesql | 执行可以多次重用或动态生成的 Transact-SQL 语句或批处理,Transact-SQL 语句或批处理可以包含嵌入参数 |
关于系统存储过程,在SQLServer联机帮助 “Transact-SQL 参考 系统存储过程, 概述”中有详细介绍。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com[img][/img] 4.2
系统表
系统表也是一种数据库中的表,是由系统自动创建维护的,用户通常在系统表中得到很多有用信息。
这里重点讲解两个系统表:sysdatabases表和sysobjects表,其他系统表的介绍请参看附录和联机帮助。 4.2.1
sysdatabases系统表
sysdatabases系统表存在于master库内,Microsoft® SQL Server™ 中的每个数据库在该表中占一行,该表比较常用的两个字段是name字段(代表数据库的名称),dbid字段(代表数据库 ID,这个字段在后面的SQLServer事件探查器的筛选操作时会用到)
在SQLServer查询分析器中执行一下语句,找出数据库名字为UFSystem的数据库ID:
select dbid,* from master..sysdatabases where name = 'ufsystem'
4.2.2
sysobjects系统表
sysobjects系统表存在于每个用户自建的数据库中,在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行,该表常用的字段有xtype字段(代表对象类型,常用的类型有:U = 用户表、P = 存储过程、TR = 触发器、V = 视图、D = 默认值或 DEFAULT 约束),name字段(代表对象名,如表名、存储过程名)
在SQLServer查询分析器中执行一下语句,找出表名字为au开头的用户自定义表:
select name from pubs..sysobjects where xtype = 'u' and name like 'au%'
其中的'%'是通配符。
4.2.3
sysobjects系统表的高效使用方法
如果要查找一个指定名字的触发器所依赖的表,那么利用sysobjects系统表可以快速实现该需求。
如:pubs库中有个名字是employee_insupd的触发器(这个名字很有可能是被后面讲的事件探查器跟踪出来的结果),若想查询该触发器是依赖于哪个表时,以下的语句非常有用。
检索出指定数据库中所有的触发器名字:
select * from pubs..sysobjects where xtype = 'tr'
根据触发器的具体名字,查出它所依赖的表:
select object_name(parent_obj) as 表名 from pubs..sysobjects where xtype = 'tr' and name = 'employee_insupd'
上句中的object_name( )是个系统函数,作用是将对象ID转换为对应的对象名。Object_ID( )作用与之相反。
本章小结: 通过本章与上一章的学习,对SQL语句的用法及数据库系统表结构有了框架性的了解,为SQL Server其他功能的应用提供了基础,但在工作过程中,还要根据实际遇到的问题,对本部分所涉及知识进行更深入的研究,才能使SQL语句的功能得到更灵活、全面的应用。 |