Sql server SQL Server依赖项

Sql server SQL Server依赖项,sql-server,Sql Server,在SQLServer2005+中,是否有一种简单的方法来查找表/存储过程/函数依赖关系?我继承了一个巨大的应用程序,它有很多表,甚至有更多的存储过程和函数,它们很长,相互关联 最后,有没有一种方法可以构建依赖关系树?理想情况下,我要寻找的是两个方向: 对于表/过程-什么取决于它?:显示最终引用它的所有存储过程(理想情况下是在树状视图中,以便子过程嵌套到调用它们的较大过程中) 对于过程-它依赖于什么?:显示给定过程在运行时将(或可能)接触的所有过程和表 看起来这个工具不应该很难制作,而且对于数据库

在SQLServer2005+中,是否有一种简单的方法来查找表/存储过程/函数依赖关系?我继承了一个巨大的应用程序,它有很多表,甚至有更多的存储过程和函数,它们很长,相互关联

最后,有没有一种方法可以构建依赖关系树?理想情况下,我要寻找的是两个方向:

对于表/过程-什么取决于它?:显示最终引用它的所有存储过程(理想情况下是在树状视图中,以便子过程嵌套到调用它们的较大过程中)

对于过程-它依赖于什么?:显示给定过程在运行时将(或可能)接触的所有过程和表

看起来这个工具不应该很难制作,而且对于数据库维护来说非常有用。有人知道这样的事吗?如果这不存在,为什么不存在


Management Studio中的内置功能很好,但信息似乎一点也不完整。

我认为这不是一个保证完整的列表,但在ManagementStudio中,您可以右键单击表或存储过程,然后选择查看依赖项选项。

RedGate有一个非常有用的工具,名为。我们已成功地将其用于您希望获得的结果类型。

试图跟踪依赖关系的系统表通常是错误的,因此,您从中得到的任何答案,都必须通过其他方式重新确认,为什么还要费事呢

存在商业产品,例如Redgate SQL依赖项跟踪器

像我这样一个差劲的开发人员,我使用免费的SQL Digger。通过在DDL中搜索对象名,通常可以找到所讨论对象的一级依赖关系


依赖项跟踪的下一个级别是跟踪C#或VB.NET对象依赖于SQL中的对象的内容,但好吧,在全局搜索之外,没有用于此的工具。

如果预算不足,这里列出了一个选项列表:


您还可以运行跟踪,并在单击“查看依赖项”时查看ManagementStudio的实际操作。抓取该代码,看看是否可以修改它以供自己使用。这是一项很好的技术,可以帮助您了解如何自动化通常通过UI执行的各种操作

希望我现在说这个还不算太晚:

如果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');
发件人:

我们可以让它更华丽:

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

使用探查器,您应该能够查看服务器上运行的代码。最后,您可以使用免费试用版-这是一个很棒的工具。我相信
sys.objects
表所属的对象目录视图是在SQL 2005中引入的,但是可以使用信息架构视图编写类似的查询。它们有点复杂,但是你可以在网站上找到关于它们的文档。你可以将其保存到Excel并使用(一个免费的、真正高级的图形可视化工具)导入。顺便说一句,现在不推荐使用
sql\u依赖项
,所以最好使用
sys.sql\u expression\u dependencies
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