数据库对象定义数据库内容的结构。它们包含在数据库项目中,数据库项目还可以包含数据生成计划和脚本。
常见的数据库对象包括:表,索引,视图,图表,缺省值,规则,触发器,存储过程,函数等。
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 其他查询方法
存储过程有单独的系统视图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查询。
本文待补充