要在多个数据库中查找对象的依赖关系?

时间:2009-01-03 19:02:01

标签: sql-server

如何在数据库中找到表的依赖关系?

通常sp_depends将为特定对象上的所有依赖对象提供信息,或者通过GUI工具以更加结构化的方式查看它。现在,这些方法显示的依赖关系仅限于一个数据库 - 如果我们在其他数据库中有依赖,那该怎么办?

有任何疑问吗?

2 个答案:

答案 0 :(得分:1)

AFAIK,SQL Server无法开箱即用。

您很可能需要第三方程序,例如Red-Gate的SQL Dependency Tracker,这应该是这样做的。

答案 1 :(得分:0)

我将为其他人留下寻找交叉数据库依赖关系的任务,因为我即将在今天早上跑出大门,但想留下关于sp_depends的快速说明。它坏了,不要用它。众所周知,这是不可靠的。根据微软“使用sys.dm_sql_referencing_entities和sys.dm_sql_referenced_entities而不是”,它正在走出困境。这就是sp_depends被破坏的原因,它依赖于创建顺序。假设您有两个存储过程,ProcA和ProcB。 ProcB依赖于ProcA。如果您创建ProcA那么创建ProcB sp_depends将报告依赖关系,但由于支持后期绑定,如果您创建ProcB,那么创建ProcA sp_depends将不报告依赖关系。

对于它的价值而言,我使用了一些工具可以很好地报告依赖关系,但我最喜欢的是,如果你有权访问它,那么将处理跨数据库依赖关系的工具是Visual Studio for Database专业人士。它相当花钱但是如果你有权访问它有一个很好的依赖工具并且支持轻量级重构,比如说你改变了一个列的名字,它可以找到所有的视图和程序,甚至可以在多个dbs中为你更新列名你的依赖。

对于便宜的单一数据库GUI替代方案,ApexSql是一个很好的工具。在免费方面,您可以找到或创建存储过程来为您进行依赖性检查,但我现在没有任何链接可以帮助您解决此问题。