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

时间:2009-09-18 16:45:52

标签: sql sql-server sql-server-2005 tsql

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

3 个答案:

答案 0 :(得分:8)

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

在文章中,他们使用

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

答案 1 :(得分: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

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

答案 2 :(得分:4)

如果您正在使用管理工作室,则可以右键单击表格并“查看依赖项”。

这里有一篇关于如何在tsql中执行此操作的文章的链接,我猜你正在寻找:

https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=277

您总是可以使用所有具有依赖关系的表构建临时表/ var,并将其与所有表进行比较,以查看没有依赖关系的内容。