SQL Server依赖关系
有没有一种简单的方法来追查SQL Server 2005 +中的表/存储过程/函数依赖关系? 我已经inheritance了一个巨大的应用程序,包含很多表格,甚至更多的存储过程和function,这些程序和function是相互关联的。
在一天结束的时候是否有办法构build一个依赖树? 理想情况下,我正在寻找双向:
对于表/程序 – 依赖于它? :向我展示所有最终引用它的存储过程(最好在树视图中使子过程嵌套到调用它们的更大的过程中)
对于一个程序 – IT依赖于什么? :向我展示给定过程在运行时(或可能)碰到的所有过程和表格。
看来这个工具不应该那么难,而且对于数据库维护通常是非常有用的。 有人知道这样的事情吗? 如果这不存在,为什么不行?
Management Studio中的内置function非常好,但信息看起来并不完整。
红门有一个非常有用的工具,称为SQL依赖追踪 。 我们已经成功地将其用于您希望获得的结果types。
希望我不会太迟:
如果您的SQLlogin可以访问特定数据库中的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
以此为出发点,您可能会构build一个体面的工具来创build依赖关系树。 还有types特定的视图(例如sys.columns),可以提供关于每个特定数据库对象types的深入信息; 这些可以用来在必要时提供对象的上下文信息。
我不认为这是一个保证完整的列表,但在Management Studio中,您可以右键单击表或存储过程,然后selectView Dependencies
选项。
如果预算不足,以下是选项列表:
http://www.mssqltips.com/tip.asp?tip=1294
你也可以运行一个跟踪,看看当你点击“依赖关系”时pipe理工作室实际上在做什么。 抓住该代码,看看你是否可以修改它以供自己使用。 这是一个很好的技巧,可以帮助您了解如何通过UI正常执行各种操作。
试图跟踪依赖关系的系统表通常是错误的,所以你得到的任何答案都必须用其他方法重新确认,那么为什么要这样做呢?
存在商业产品,例如Redgate SQL依赖关系跟踪器。
一个像我这样的穷人,我使用SQL Digger,这是免费的。 通过在DDL中search对象名称,通常可以find有问题的对象的第一级依赖关系。
依赖关系跟踪的下一个级别是跟踪C#或VB.NETnetworking对象依赖于SQL中的对象,但AFAIK工具在全局search之外不存在。
试试这个生产力工具http://sqlhopper.weebly.com/这很酷;
我发现这个解决scheme和它的伟大。
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');
来自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