【问题标题】:Determining the dependencies of a stored procedure.确定存储过程的依赖关系。
【发布时间】:2012-11-29 17:17:41
【问题描述】:
有没有办法(或者,理想情况下,查询)来确定存储过程访问的所有表,包括由它自己调用的其他存储过程访问的那些表(以及它们调用的那些,等等)在调用堆栈中)。
如果有人可以编造这样的查询,是否还可以确定是否访问表以进行更新、选择或删除?
是否可以确定相同的视图被放入混合中?
我的存储过程不包含任何动态构造的调用,因此至少稍微简化了它。
【问题讨论】:
标签:
sql-server
tsql
stored-procedures
dependencies
proc
【解决方案1】:
试试这个链接:
how-to-find-all-dependencies-of-a-table-in-sql-server
或者这个来搜索文本:
DECLARE @Search varchar(255)
SET @Search='cost_centre'
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 m.definition Like '%'+@Search+'%'
ORDER BY 2,1
【解决方案2】:
目前我无法访问 sql-server,但我知道您可以检查依赖关系 - 我已经完成了这项工作,确定访问表的视图。
看看sys.all_objects 和sysdepends。您可以通过object_id 和depid 加入他们。包括sysdepends 的type-column,您应该能够获取由SP 访问的表。
明天会看看,如果仍然有必要 - 但你应该能够检查上述信息来获取你的信息!
@edit:刚刚看到Aaron的评论。一切都在那里解释。也许在我的情况下获得正确的依赖关系是幸运的;)