1

一部のビューで使用されているすべてのテーブルを見つける必要があります。これらのビューには他のビューが含まれている可能性があるため、それらのテーブルを返す必要があります。MyVはビュー名Tで、 はテーブルの名前です。

Views | Tables
 V1   |   T1
 V2   |   T2
 V3   |   T3
      |   T4
      |   T5

ここで、私のビューに次の参照が含まれているとしましょう:

View | References
 V1  |   T1, T2
 V2  |   V1, T5
 V3  |   V1, V2, T3

したがって、返されるとV1の名前が必要です。T1T2

V2が必要T1T2としT5ます。

、、およびがV3必要な場合T1T2T3T5

4

1 に答える 1

0

sys.dm_sql_referenced_entitiesオブジェクトが依存しているテーブルとビューを選択するために使用できます。BooksOnlineの記事を参照してください。

このcteは、sys.dm_sql_referenced_entitiesの結果に表示されるビューからテーブルを再帰的に選択します。それはあなたのために働くはずです。SQLフィドルを参照してください

DECLARE @viewName sysname = 'dbo.V3'
;WITH cteViews AS(
    SELECT 
         re.referenced_id
        ,o.type_desc    
        ,SCHEMA_NAME(o.schema_id) AS [schema]
        ,o.name
    FROM sys.dm_sql_referenced_entities (@viewName, 'OBJECT') re
    JOIN sys.objects o ON re.referenced_id = o.object_id 
    UNION ALL
    SELECT
         viewTables.referenced_id
        ,viewTables.type_desc
        ,viewTables.[schema]
        ,viewTables.name
    FROM cteViews cte
    OUTER APPLY(
        SELECT
             re.referenced_id
            ,o.type_desc    
            ,SCHEMA_NAME(o.schema_id) AS [schema]
            ,o.name
        FROM sys.dm_sql_referenced_entities (cte.[schema] + '.' + cte.name, 'OBJECT') re
        JOIN sys.objects o ON re.referenced_id = o.object_id 
        WHERE o.type_desc = 'USER_TABLE'
    ) AS viewTables
    WHERE cte.type_desc = 'VIEW'    
)
SELECT 
    [schema]
    ,name
FROM cteViews
WHERE type_desc <> 'VIEW'
ORDER BY name

SSMSには、オブジェクトの依存関係を表示できる機能もあります。オブジェクトエクスプローラーでビューを右クリックし、[依存関係の表示]を選択します。次に、ラジオボタン「「ビュー名」が依存するオブジェクト」を選択します。

于 2013-02-16T02:11:24.097 に答える