【发布时间】:2018-09-18 08:57:46
【问题描述】:
有没有办法找出某个特定的表是否在存储过程中使用?
在我工作的地方,有近 100 个存储过程,并且遍历每个存储过程不是一个可行的选择。
我需要一个使用特定表的存储过程列表。有没有办法实现这一目标?
提前致谢
【问题讨论】:
-
redgate 的免费工具可以做到这一点:SQL Search
标签: sql sql-server
有没有办法找出某个特定的表是否在存储过程中使用?
在我工作的地方,有近 100 个存储过程,并且遍历每个存储过程不是一个可行的选择。
我需要一个使用特定表的存储过程列表。有没有办法实现这一目标?
提前致谢
【问题讨论】:
标签: sql sql-server
以下查询可能对您有所帮助。
SELECT OBJECT_NAME(id)
FROM SYSCOMMENTS S
INNER JOIN SYS.OBJECTS O ON O.Object_Id = S.id
WHERE S.TEXT LIKE '%Table_name%'
AND O.type = 'P'
它可以搜索存储过程中是否包含特定的单词。如果您需要查找表名,则可以从存储过程文本中找到它。希望对您有所帮助。
【讨论】:
您可以使用下面的 SQL。只需替换您的表名即可。
SELECT DISTINCT
o.name AS Object_Name,
o.type_desc
FROM sys.sql_modules m
INNER JOIN sys.objects o
ON m.object_id = o.object_id
WHERE o.type='P' and
m.definition Like '%yourtable%';
【讨论】:
查看 sys.dm_sql_referencing_entities。示例:
选择引用模式名称,引用实体名称, referencing_id, referencing_class_desc, is_caller_dependent FROM sys.dm_sql_referencing_entities('dbo.t', 'OBJECT');
【讨论】: