2

在 SQL Server 2008 中,对于给定数据库中的视图,我可以通过执行以下命令获取视图所依赖的其他数据库中的表:

select distinct referenced_database_name, referenced_schema_name, referenced_entity_name
from sys.dm_sql_referenced_entities ('dbo.NameOfView', 'OBJECT')
where referenced_database_name is not null

但是,sys.dm_sql_referenced_entities在 SQL Server 2005 中不可用。有没有办法从元数据中获取视图所依赖的其他数据库中的表列表?

4

4 回答 4

2

来自 Aaron Bertrand模糊相关的博客条目

系统表 sysdepends 不维护位于本地数据库之外的任何对象的依赖关系信息。这意味着,如果您想检查 SQL Server 2005 或更早版本中名称由三部分或四部分组成的对象的有效性,您将不得不手动解析所有对象的定义。

他接着从这里推荐了一个解析器——但恐怕在 2005 年这仍然是一项令人讨厌的工作。

于 2012-06-06T21:55:13.183 回答
1

您可以使用sys.sql_dependencies。不过,它会为您提供每列依赖项,因此您必须唯一的主要 id 才能获取表。

select distinct object_name(referenced_major_id)
from sys.sql_dependencies
where object_id = object_id('viewName')

至于从其他数据库获取结果,这将很棘手,因为我不知道数据是如何跨数据库存储的,也无法测试它,因为我没有现成的 SQL Server 2005 安装可供查看。在 SQL Server 2008+ 中,新视图是 sys.sql_expression_dependencies 驱动您提到的 sys.dm_sql_referenced_entities。

我会做更多的挖掘,看看我是否能找到更多的东西。

于 2012-06-06T21:50:59.283 回答
1

我发现了一些你可能感兴趣的东西。试试 sp_depends。BOL 声明您可以在 SQL Server 2005 中使用此存储过程派生视图的依赖关系。BOL 链接

于 2012-06-06T23:43:17.080 回答
0

是的,Zhenny,我们可以从 sqlserver2008+ 版本中实现这一点。然后使用下面的查询列出其他数据库中使用的所有对象。

select  referenced_entity_name,referenced_database_name
from sys.sql_expression_dependencies 
where referencing_id = object_id('SCHEMA.OBJECTNAME')
于 2013-04-15T07:33:26.240 回答