【整理】SQLServer查询各种数据库对象(表,索引,视图,图表,存储过程等)

首先明确数据库对象的定义:数据库对象定义数据库内容的结构。它们包含在数据库项目中,数据库项目还可以包含数据生成计划和脚本。

常见的数据库对象包括:表,索引,视图,图表,缺省值,规则,触发器,存储过程,函数等

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视图,比如:查询数据库中所有的视图

 SELECT * FROM sys.objects WHERE type = 'U'

由于对象id在对应数据库中是唯一的,可以在查询时联结其他表或视图,比如:查询数据库中所有存储过程及其内容

 SELECT O.name, M.definition FROM sys.objects O
JOIN sys.sql_modules M ON M.object_id = O.object_id
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查询。

本文待补充

上一篇:linux – 这个程序集如何不崩溃?


下一篇:SQLserver学习(四)——T-SQL编程之事务、索引和视图