T-SQL :: 枚举所有嵌套视图
T-SQL :: Enumerate all nested views
我手上有一个状态非常糟糕的数据库。
我惊恐地发现有嵌套视图(一个视图调用另一个视图)。
感谢 我知道如何查看视图是否具有来自 SSMS GUI 的依赖项。有没有办法查询整个数据库并枚举所有嵌套视图?
看看这是否能让您接近您正在寻找的东西。
SELECT DISTINCT
sd.object_id,
referencing_view_name = OBJECT_NAME(sd.object_id),
sd.referenced_major_id,
referenced_view_name = OBJECT_NAME(sd.referenced_major_id)
FROM
sys.sql_dependencies sd
WHERE
EXISTS (SELECT 1 FROM sys.views v WHERE sd.object_id = v.object_id)
AND EXISTS (SELECT 1 FROM sys.views v WHERE sd.referenced_major_id = v.object_id);
编辑:与原始信息相同,但使用 sys.sql_expression_dependencies 代替 sys.sql_dependencies
SELECT
sed.referencing_id,
referencing_view_name = OBJECT_NAME(sed.referencing_id),
sed.referenced_id,
referenced_view_name = sed.referenced_entity_name
FROM
sys.sql_expression_dependencies sed
WHERE
EXISTS (SELECT 1 FROM sys.views v WHERE sed.referencing_id = v.object_id)
AND EXISTS (SELECT 1 FROM sys.views v WHERE sed.referenced_id = v.object_id);
以下查询使用 non-deprecated 系统视图 sys.sql_expression_dependencies
获取视图引用的视图名称:
select Ving.name as ReferencingViewName, Ved.name as ReferencedViewName
from sys.sql_expression_dependencies as SED inner join
sys.views as Ving on Ving.object_id = SED.referencing_id inner join
sys.views as Ved on Ved.object_id = SED.referenced_id;
我手上有一个状态非常糟糕的数据库。
我惊恐地发现有嵌套视图(一个视图调用另一个视图)。
感谢
看看这是否能让您接近您正在寻找的东西。
SELECT DISTINCT
sd.object_id,
referencing_view_name = OBJECT_NAME(sd.object_id),
sd.referenced_major_id,
referenced_view_name = OBJECT_NAME(sd.referenced_major_id)
FROM
sys.sql_dependencies sd
WHERE
EXISTS (SELECT 1 FROM sys.views v WHERE sd.object_id = v.object_id)
AND EXISTS (SELECT 1 FROM sys.views v WHERE sd.referenced_major_id = v.object_id);
编辑:与原始信息相同,但使用 sys.sql_expression_dependencies 代替 sys.sql_dependencies
SELECT
sed.referencing_id,
referencing_view_name = OBJECT_NAME(sed.referencing_id),
sed.referenced_id,
referenced_view_name = sed.referenced_entity_name
FROM
sys.sql_expression_dependencies sed
WHERE
EXISTS (SELECT 1 FROM sys.views v WHERE sed.referencing_id = v.object_id)
AND EXISTS (SELECT 1 FROM sys.views v WHERE sed.referenced_id = v.object_id);
以下查询使用 non-deprecated 系统视图 sys.sql_expression_dependencies
获取视图引用的视图名称:
select Ving.name as ReferencingViewName, Ved.name as ReferencedViewName
from sys.sql_expression_dependencies as SED inner join
sys.views as Ving on Ving.object_id = SED.referencing_id inner join
sys.views as Ved on Ved.object_id = SED.referenced_id;