Sql Server:所有对象依赖项

时间:2010-04-27 22:14:03

标签: sql-server

我是否可以在Sql Server中找到所有可能的对象类型依赖项?

我的意思是“对象依赖”是一个对象可以依赖的对象列表。例如,TABLE可以依赖于SCHEMA,TYPE,TABLE,FUNCTION等。

3 个答案:

答案 0 :(得分:1)

除了动态SQL,从技术上讲,SQL Server确实跟踪依赖性。但是,在SQL Server 2008之前,它的跟踪不可靠,因为如果在创建时存在所有依赖实体,它只会更新依赖关系。 SQL Server 2008显着改善了依赖关系跟踪。

在SQL Server 2000和2005中,您可以查询sys.sql_dependencies以获取依赖项列表。

在SQL Server 2008中,您应该使用sys.sql_expression_dependencies有关详情,请参阅sys.sql_expression_dependencies

编辑我想我可能误解了你的问题。听起来您正在寻找TABLE类型对象可以依赖的对象类型的列表。直接或间接地,它将是系统中的任何对象类型。如果我们只想要“直接”依赖,那么它取决于“直接”的含义。例如,引用视图的触发器是否计为触发器表与视图的直接依赖关系?

编辑据我所知,没有类型之间所有可能的依赖关系的枚举列表。您可以实现的最好的方法是使用以下内容分析依赖于给定数据库中其他类型的类型:

Select DependentObj.Type, ReferencedObj.Type
from sys.sql_dependencies As D
    Join sys.sysobjects As ReferencedObj
        On ReferencedObj.id = D.referenced_major_id 
    Join sys.sysobjects As DependentObj
        On DependentObj.id = D.object_id 
Group By DependentObj.Type, ReferencedObj.Type

答案 1 :(得分:0)

对于实际对象(表'foo'所依赖的对象):

sys.sql_dependencies

主要准确无误。还有SMO助手DependencyWalker

作为一般的类型问题(即表可以依赖什么类型的对象),您只需要在MSDN上查看每个对象CREATE / ALTER语句的规范并仔细阅读所有内容

答案 2 :(得分:0)

表中的持久计算列可能取决于用户定义的函数。

非确定性用户定义函数可能依赖于表。

约束可能导致表依赖于表。

ad nauseum。

你可以选择任何一对对象类型,我们也许能够提出依赖。

各种SQL Server功能显然存在一些限制,但我不知道所有可能允许和不允许的依赖关系的任何综合矩阵。