Sql server 在SQLServer2005中,如何获取视图所依赖的其他数据库中的表?

Sql server 在SQLServer2005中,如何获取视图所依赖的其他数据库中的表?,sql-server,sql-server-2008,sql-server-2005,Sql Server,Sql Server 2008,Sql Server 2005,在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

在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_引用的_实体在sql Server 2005中不可用。是否有办法从元数据中获取视图所依赖的其他数据库中的表列表?

您可以使用。 它将为您提供每列依赖项,因此您必须唯一主id才能获取表

select distinct object_name(referenced_major_id)
from sys.sql_dependencies
where object_id = object_id('viewName')
至于从其他数据库获取结果,这将是一个棘手的问题,因为我不知道数据是如何跨数据库存储的,也无法测试它,因为我没有现成的SQLServer2005安装。在SQL Server 2008+中,新的视图是sys.SQL_expression_dependencies,这是您提到的sys.dm_SQL_引用的_实体的驱动因素

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

你可以用。 它将为您提供每列依赖项,因此您必须唯一主id才能获取表

select distinct object_name(referenced_major_id)
from sys.sql_dependencies
where object_id = object_id('viewName')
至于从其他数据库获取结果,这将是一个棘手的问题,因为我不知道数据是如何跨数据库存储的,也无法测试它,因为我没有现成的SQLServer2005安装。在SQL Server 2008+中,新的视图是sys.SQL_expression_dependencies,这是您提到的sys.dm_SQL_引用的_实体的驱动因素

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

来自Aaron Bertrand的:

系统表sysdepends不维护依赖项信息 对于位于本地数据库之外的任何对象。这意味着 如果要使用三个或多个参数检查对象的有效性 SQL Server 2005或更早版本中的四部分名称 手动解析所有对象的定义

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

来自Aaron Bertrand的:

系统表sysdepends不维护依赖项信息 对于位于本地数据库之外的任何对象。这意味着 如果要使用三个或多个参数检查对象的有效性 SQL Server 2005或更早版本中的四部分名称 手动解析所有对象的定义


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

我发现了一些你可能感兴趣的东西。
试试sp_(视情况而定)。BOL声明您可以在SQLServer2005中使用此存储过程派生视图的依赖项

我发现了一些你可能感兴趣的东西。
试试sp_(视情况而定)。BOL声明您可以在SQLServer2005中使用此存储过程派生视图的依赖项

是的,我们可以通过sqlserver2008+版实现这一点。继续使用下面的查询列出从其他数据库使用的所有对象

select  referenced_entity_name,referenced_database_name
from sys.sql_expression_dependencies 
where referencing_id = object_id('SCHEMA.OBJECTNAME')

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

select  referenced_entity_name,referenced_database_name
from sys.sql_expression_dependencies 
where referencing_id = object_id('SCHEMA.OBJECTNAME')