用于查找存储过程,视图,函数等未使用的表的tsql脚本?

Xai*_*oft 6 sql t-sql sql-server sql-server-2005

是否有一个t-sql脚本来查找未通过存储的procudures,视图,函数等在sql server中使用的表.我有一个包含100个表的数据库,如果不是更多,在我删除表之前,我想知道是否有一个脚本可以遍历数据库中的每个对象并告诉我是否正在使用任何表.

Luk*_*sik 8

如果您想使用脚本,这里(列出SQL Server对象依赖项)是一篇非常好的文章,如何编写依赖项脚本.使用它,您可以列出被引用的表.您拥有数据库中的表列表,因此您知道哪些表未被使用.

在他们使用的文章中

sp_depends
存储过程.然而,它有一个失败.例如,如果您有一个使用表"MyTable"的存储过程,并且在创建表"MyTable"之前创建了该过程,则不会在依赖项列表中看到此过程.这就是你应该搜索表格的原因
syscomments
找到依赖项.但这也不准确,因为如果您在注释中有表的名称,则会将其视为依赖项.


dev*_*vio 8

据我所知,你不能真正依赖SQL Server的依赖管理.卢卡斯指出了许多问题之一.

在2005年,旧syscomments表的等价物是sys.sql_modules.

要查找TSQL代码中未出现的所有表名(视图,SP,函数),请使用以下语句:

select t.name, sys.objects.name foundin, sys.objects.type_desc
from sys.objects t 
left outer join 
    sys.sql_modules
    inner join sys.objects on sys.objects.object_id = sys.sql_modules.object_id
on sys.sql_modules.definition like '%' + t.name + '%'
where t.type = 'U'
and sys.objects.name is null
order by t.name, type_desc, foundin
Run Code Online (Sandbox Code Playgroud)

如果注释掉具有IS NULL条件的行,则会在TSQL代码中找到所有表名的出现.(无论表名是否真的指那个表)