是否有一种简单的方法可以在SQL Server 2005+中追逐表/存储过程/函数依赖项?我继承了一个包含大量表的巨型应用程序,甚至还有更多存储过程和函数,这些程序和函数很长并且相互关联。
在一天结束时有没有办法构建依赖树?理想情况下,我正在寻找的是两个方向:
对于表/过程 - 依赖于它?:向我展示最终引用它的所有存储过程(理想情况下在树视图中,以便子过程嵌套到调用的较大过程它们)
对于某个程序 - IT依赖什么?:向我展示给定程序在运行时(或可能)触摸的所有程序和表格。
看起来这个工具不应该那么难做,并且通常对数据库维护非常有用。有人知道这样的事吗?如果这不存在,为什么不呢?
Management Studio中的内置功能很不错,但信息似乎根本不完整。
答案 0 :(得分:26)
希望我对此并不太晚:
如果您的SQL登录可以访问特定数据库中的sys模式,则可以使用sys.dependencies视图一次性查找所有对象的依赖项:
SELECT o.name, o.type_desc, p.name, p.type_desc
FROM sys.sql_dependencies d
INNER JOIN sys.objects o
ON d.object_id = o.object_id
INNER JOIN sys.objects p
ON d.referenced_major_id = p.object_id
以此为出发点,您可以构建一个合适的工具来创建依赖树。还有类型特定的视图(例如sys.columns),它们提供有关每种特定数据库对象类型的更深入信息;如有必要,这些可用于提供对象的上下文信息。
答案 1 :(得分:12)
Red Gate有一个非常有用的工具叫SQL Dependency Tracker。我们已经成功地将它用于您希望获得的结果类型。
答案 2 :(得分:2)
我认为这不是一个保证完整列表,但在Management Studio中,您可以右键单击表或存储过程并选择View Dependencies
选项。
答案 3 :(得分:2)
如果预算不足,这里有一个选项列表:
http://www.mssqltips.com/tip.asp?tip=1294
您还可以运行跟踪,并在单击“查看依赖项”时查看管理工作室实际正在执行的操作。抓住该代码,看看您是否可以修改它以供自己使用。这是一种很好的技术,用于确定如何自动执行通常通过UI执行的各种操作。
答案 4 :(得分:1)
我找到了这个解决方案并且很棒。
SELECT referencing_schema_name, referencing_entity_name,
referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('dbo.udf_func', 'OBJECT');
答案 5 :(得分:0)
试图跟踪依赖关系的系统表通常是错误的,所以你从中得到的任何答案,你都必须通过其他方式重新确认,那么为什么要烦恼呢?
存在商业产品,例如Redgate SQL Dependency Tracker。
像我这样的穷人,我使用SQL Digger,这是免费的。通过在DDL中搜索对象名称,您通常可以找到相关对象的第一度依赖关系。
下一级依赖关系跟踪是跟踪C#或VB.NET网络对象依赖于SQL中的对象,但AFAIK,全局搜索之外的工具不存在。
答案 6 :(得分:0)
尝试这种生产力工具http://sqlhopper.weebly.com/ 这很酷
答案 7 :(得分:0)
来自MSDN:
SELECT * FROM sys.sql_expression_dependencies
WHERE referenced_id = OBJECT_ID(N'Production.Product');
我们可以让它变得更加漂亮:
select
I.name depending, I.xtype dependingtype,
E.name depended, E.xtype dependedtype
from sys.sql_expression_dependencies D
left outer join sysobjects I on D.referencing_id = I.id
left outer join sysobjects E on D.referenced_id = E.id
where 1 = 1
and ( E.name = 'mytable' or I.name = 'mytable' ) -- customize this any way you want
order by dependedtype, depended, dependingtype, depending