您的位置:首页 > 数据库

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

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

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

1.sys.objects视图

数据库中创建的每一个对象都对应表中的一行,但不包括DDL触发器,查询触发器应该使用sys.triggers

常见的不同类型对象在sys.objects中的区分:

类型type列type_desc列
FOREIGN KEY 约束FFOREIGN_KEY_CONSTRAINT
SQL 标量函数FNSQL_SCALAR_FUNCTION
SQL 内联表值函数IFSQL_INLINE_TABLE_VALUED_FUNCTION
内部表ITINTERNAL_TABLE
SQL 存储过程PSQL_STORED_PROCEDURE
PRIMARY KEY 约束PKPRIMARY_KEY_CONSTRAINT
系统基表SSYSTEM_TABLE
SQL 表值函数TFSQL_TABLE_VALUED_FUNCTION
表(用户定义类型)UUSER_TABLE
UNIQUE 约束UQUNIQUE_CONSTRAINT
视图VView
因此查询数据库中包含的对象可以直接查询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查询。

本文待补充
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐