Sqlserver 查询无效的存储过程

因为各种原因数据库中存在大量无用的存储过程,很多因为所依赖的对象(数据表、函数等)被删除导致无法使用。

下列语句利用系统自带的视图数据表,查询因为依赖对象不存在而导致无效的存储过程:

--查找 所依赖的对象(数据表、函数)不存在的存储过程
SELECT
	base.name AS 存储过程名称,
	depend.referenced_entity_name AS 依赖的对象名称
FROM sys.sql_expression_dependencies depend
INNER JOIN sys.procedures base ON (depend.referencing_id = base.object_id)
WHERE depend.referenced_id IS NULL --所依赖的对象不存在
	AND referenced_schema_name IS NOT NULL --去掉那些别名定义的,例:SELECT * FROM temp a 中的a
	AND  depend.referenced_server_name IS NULL   --依赖的不是外部数据源
	AND depend.referenced_database_name IS NULL  --去掉依赖的是同数据服务器上的其他数据库的。
	AND depend.is_caller_dependent <> 1  --依赖的不是存储过程
	AND depend.referenced_entity_name NOT IN (SELECT name FROM  sysobjects)  --所依赖的对象不是数据库中的对象
ORDER BY base.name


你可能感兴趣的:(SQL,Server,SQL,Server,数据库整理)