web-dev-qa-db-ja.com

sys.dm_sql_referencing_entitiesが結果を返さない

これが構文またはタイプミスであることは間違いありません...しかし、sys.dm_sql_referencing_entitiesに親テーブルを照会すると、結果がゼロになります。エラーはなく、結果はありません。

USE [source];
GO
SELECT *
FROM sys.dm_sql_referencing_entities ('[Test].[USERS]', 'OBJECT');
GO

SSMSから依存関係を表示すると、次のようになります。

SSMS dependencies

これまで使ったことがないので、これがどのように機能するのか、何を返すのか誤解しているのではないでしょうか。 SUBSCRIPTIONSテーブルに対しても試しましたが、同じ結果です...何もありません。

1
Kevin3NF

[〜#〜] bol [〜#〜] によると:

テーブルは、計算列、CHECK制約、またはDEFAULT制約の定義で、Transact-SQLモジュール、ユーザー定義型、またはXMLスキーマコレクションを参照する場合にのみ、参照エンティティとして追跡されます。

外部キーの関係は、このDMVには表示されません。

2
Mark Sinkinson

参照/参照エンティティ関数は、オブジェクト、列などが直接参照されるインスタンスを返します(通常、ストアドプロシージャなどの他のオブジェクトでは、 Markにはドキュメントの完全なリストがあります )。

これらの関数は、外部キーカタログビューから取得できる外部キーの依存関係を分析するためのものではありません。この単純なクエリは、すべてのテーブルがdboスキーマにあることを前提としていますが、それ以外の場合にそれらを具体化するには、sys.schemasに結合を追加する必要があります。

SELECT 'FK points from ', f.name, ' to ', t.name
  FROM sys.foreign_keys AS fk
  INNER JOIN sys.objects AS f 
    ON fk.parent_object_id = f.[object_id]
  INNER JOIN sys.objects AS t 
    ON fk.referenced_object_id = t.[object_id];

テーブルを参照するオブジェクトを作成すると、質問のクエリは結果を返します。例:

CREATE VIEW [Test].MyView_DeleteMe
AS
  SELECT * FROM [Test].Users;
3
Aaron Bertrand