我正在使用具有许多跨数据库视图的数据库。虽然 INFORMATION_SCHEMA.VIEWS 列出了所有这些视图,但 INFORMATION_SCHEMA.VIEW_TABLE_USAGE 和 INFORMATION_SCHEMA.VIEW_COLUMN_USAGE 没有。
所有有问题的视图都采用以下格式:
CREATE VIEW [dbo].[Invoice]
AS SELECT * FROM [otherdb].[dbo].[Invoice]
以下查询返回 0 行:
SELECT
VIEW_CATALOG
,VIEW_SCHEMA
,VIEW_NAME
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE TABLE_CATALOG <> VIEW_CATALOG
将 SELECT * 的适当性留给另一个讨论,为什么外部数据库引用不在 INFORMATION_SCHEMA 视图中,有什么办法可以得到它们?
是的,出于各种原因停止使用
INFORMATION_SCHEMA
,包括我在那篇文章中没有提到的一个(还),这是他们不处理跨数据库依赖项的事实。请改用目录视图和动态管理功能。
要获得视图,您可以使用
sys.sql_expression_dependencies
:要获取列名,您可以使用
sys.dm_sql_referenced_entities
: