Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
tsql脚本查找存储过程、视图、函数等未使用的表?_Sql_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

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

tsql脚本查找存储过程、视图、函数等未使用的表?,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,是否有一个t-sql脚本来查找存储过程、视图、函数等在sql server中未使用的表。我有一个数据库,它有100多个表(如果不是更多的话),在我删除表之前,我想知道是否有一个脚本可以遍历数据库中的每个对象,并告诉我是否有任何表正在使用。如果您使用的是management studio,您可以右键单击表并“查看依赖项” 下面是一篇关于如何在tsql中实现这一点的文章的链接,我猜这正是您想要的: 您可以使用所有具有依赖关系的表构建临时表/var,并将其与所有表进行比较,以查看哪些表没有任何依赖关

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

如果您使用的是management studio,您可以右键单击表并“查看依赖项”

下面是一篇关于如何在tsql中实现这一点的文章的链接,我猜这正是您想要的:


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

如果您想使用脚本,这是一篇关于如何编写依赖关系脚本的非常好的文章。使用它,您可以创建被引用表的列表。您有数据库中的表列表,因此您知道哪些表没有被使用


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

据我所知,您不能真正依赖SQL Server的依赖关系管理。卢卡斯指出了许多问题中的一个

sp_depends syscomments 在2005年,与旧的syscomments表等效的是sys.sql\u 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代码中找到所有表名的所有匹配项。(不管表名是否真的引用了该表)

什么是“未被使用”的表?你是说空表吗?不,我是说存储过程、视图、函数等中没有使用的表。假设我不久前创建了一个数据库,它有100个表,有些表已经过时,但我不确定,所以在开始删除表之前,我想知道它们是否正在使用。我不明白为什么这个问题被否决了,这似乎是一个非常有效和合理的问题。也许可以将标题改为“t-SQL脚本以查找未被存储过程、视图和函数引用的表”+1我正在寻找一种在视图/过程中查找表引用的方法,只需稍加修改,就可以很好地解决这个问题。这对于存储过程非常有效,但您确实需要将t.type='U'约束放宽到t.type IN('U','P')