SQL Server依赖关系
是否有一种简单的方法可以追溯SQL Server 2005+中的表/存储过程/函数依赖关系?我已经继承了一个巨大的应用程序,它包含很多表格以及更多的存储过程和功能,这些程序和功能是相互关联的。SQL Server依赖关系
在一天结束时有没有办法建立一个依赖树?理想情况下,我正在寻找双向:
对于表/程序 - 什么取决于它?:向我展示最终引用它的所有存储过程(理想情况下在树视图中使子过程嵌套到调用它们的更大过程中)
对于过程 - IT依赖于什么?:向我展示给定过程在运行时将(或可能)触及的所有过程和表格。
看来这个工具不应该很难做,而且对于数据库维护通常是非常有用的。有人知道这样的事情吗?如果这不存在,为什么不行?
Management Studio中的内置功能很不错,但信息看起来并不完整。
我不认为这是一个保证完整列表,但在Management Studio中,您可以右键单击表或存储过程并选择View Dependencies
选项。
试图跟踪依赖性的系统表通常是错误的,因此您从中得到的任何答案都必须通过其他方式进行重新确认,那么为什么要这样做呢?
存在商业产品,例如Redgate SQL Dependency Tracker。
像我这样的贫穷开发者,我使用SQL Digger,它是免费的。通过在DDL中搜索对象名称,通常可以找到有关对象的第一级依赖关系。
依赖关系跟踪的下一级别是追踪C#或VB.NET网络对象依赖于SQL中的对象,但AFAIK工具不存在于全局搜索之外。
这里,如果你的预算是低的选项列表:
http://www.mssqltips.com/tip.asp?tip=1294
你也可以当您单击“视图依赖性”运行跟踪,看看什么管理工作室实际上做。抓住该代码,看看你是否可以修改它以供自己使用。这是一个很好的技巧,可以帮助您了解如何自动化通常通过UI执行的各种操作。
如何“抓住该代码”? – Cory 2008-11-18 16:21:27
使用事件探查器,您应该能够看到针对服务器运行的代码。 – 2008-11-18 20:35:57
希望我不是太晚了这一点:
如果您的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),它们提供了有关每个特定数据库对象类型的更深入的信息;如有必要,这些可用于提供对象的上下文信息。
我发现这个解决方案,它的伟大。
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
终于可以使用免费试用 - 这是一个很好的工具。 – Cory 2008-12-02 18:57:32