首先明确数据库对象的定义:数据库对象定义数据库内容的结构。它们包含在数据库项目中,数据库项目还可以包含数据生成计划和脚本。
常见的数据库对象包括:表,索引,视图,图表,缺省值,规则,触发器,存储过程,函数等
1.sys.objects视图
数据库中创建的每一个对象都对应表中的一行,但不包括DDL触发器,查询触发器应该使用sys.triggers
常见的不同类型对象在sys.objects中的区分:
类型 | type列 | type_desc列 |
FOREIGN KEY 约束 | F | FOREIGN_KEY_CONSTRAINT |
SQL 标量函数 | FN | SQL_SCALAR_FUNCTION |
SQL 内联表值函数 | IF | SQL_INLINE_TABLE_VALUED_FUNCTION |
内部表 | IT | INTERNAL_TABLE |
SQL 存储过程 | P | SQL_STORED_PROCEDURE |
PRIMARY KEY 约束 | PK | PRIMARY_KEY_CONSTRAINT |
系统基表 | S | SYSTEM_TABLE |
SQL 表值函数 | TF | SQL_TABLE_VALUED_FUNCTION |
表(用户定义类型) | U | USER_TABLE |
UNIQUE 约束 | UQ | UNIQUE_CONSTRAINT |
视图 | V | View |
因此查询数据库中包含的对象可以直接查询sys.objects视图,比如:查询数据库中所有的视图
1 SELECT * FROM sys.objects WHERE type = 'U'
由于对象id在对应数据库中是唯一的,可以在查询时联结其他表或视图,比如:查询数据库中所有存储过程及其内容
1 SELECT O.name, M.definition FROM sys.objects O
2 JOIN sys.sql_modules M ON M.object_id = O.object_id
3 WHERE O.type = 'P'
2.其他查询方法
存储过程有单独的系统视图sys.procedures,基本等价于sys.objects WHERE type = 'P'
另外还可以执行系统sp查询存储过程:EXEC sp_stored_procedures,不同的是:
sys.procedures (或sys.objects WHERE type = 'P')只包含用户存储过程,但执行sp_stored_procedures可以查询所有种类的存储过程和除了系统函数之外的所有函数
3.sys.modules视图
为每个包含 SQL 语言定义模块的系统对象返回一行,类型为 FN、IF、P、PC、TF 和 V 的系统对象具有关联的 SQL 模块。
因此,对于这些类型的对象,可以联结sys.objects查询对象的语言定义模块,即其内容。
4.sp_helptext需要注意的
sp_helptext是使用频率非常高的系统存储过程,使用它可以快速列出指定名称存储过程或函数的内容,但是有如下缺点:
①格式化代码
②当一行长度超过一定后,分行显示
这样当修改存储过程或函数时,如果使用sp_helptext很可能导致格式错乱,对于下一次的代码阅读造成很大的麻烦。
因此,建议sp_helptext仅限于查看存储过程或函数的内容。
另外,加密的存储过程不能通过sp_helptext查询。
本文待补充