1

データベースのメタデータを取得するために、Sql Server 2005 & 2008 で INFORMATION_SCHEMA ビューを使用しています。

SELECT
    PK.TABLE_NAME as 'PK_TABLE_NAME',
    FK.TABLE_NAME as 'FK_TABLE_NAME',
    C.CONSTRAINT_NAME as 'CONSTRAINT_NAME'
FROM
    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
    JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
    JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
WHERE
    FK.TABLE_NAME = 'Table_Name' 

ただし、テーブルに null 許容の外部キーがある場合、「UNIQUE_CONSTRAINT_NAME」列に一致するエントリがないため、結果には含まれません。

INFORMATION_SCHEMA スキーマのビューを使用して、NULL 許容外部キー (具体的には、参照されるテーブルと列の名前) に関する情報を取得する方法を考え出すのに苦労しています。どうやらインデックスは標準の一部ではないため、ビューには含まれていません

null許容外部キーに関する情報を取得するためにクエリを変更する方法を知っている人はいますか?

編集

余談ですが、SQL Server Compact Edition には INFORMATION_SCHEMA.INDEXES ビューがあるようです。なぜ CE はこの有用な情報を取得するのでしょうか?!

4

2 に答える 2

2

sp_helpconstraint のソース コードを見てください。

管理スタジオで、次の場所に移動します。

  Databases  
    System Databases  
      master  
        Programmability  
          Stored Procedures  
            System Stored Procedures  
              sp_helpconstraint

マイクロソフトが行っていることを正確に見ることができます。テーブルのメタデータを取得する方法を「表示」する、調べることができる他のシステムストアドプロシージャがたくさんあります....

于 2009-07-28T13:11:03.667 に答える
2

私が見たところ、それはnull可能なFKではありませんが、FKが一意の制約/主キーではなく一意のインデックスを指しているように見えます。

どちらもインデックスとして実装されていますが、一意のインデックスは TABLE_CONSTRAINTS に表示されません。

「INFORMATION_SCHEMA.INDEXES」はありません。

したがって、オプションは「sys」ビューを使用することです...

編集:欠落しているビットに sys.indexes を使用します。なぜSQL CEにビューがあるのか​​ わかりません...

SELECT
    ISNULL(PK.TABLE_NAME, OBJECT_NAME(I.[object_id])) as 'PK_TABLE_NAME',
    FK.TABLE_NAME as 'FK_TABLE_NAME',
    C.CONSTRAINT_NAME as 'CONSTRAINT_NAME'
FROM
    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
    JOIN
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
    LEFT JOIN
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
    LEFT JOIN
    sys.indexes I ON C.UNIQUE_CONSTRAINT_NAME = I.[name]
于 2009-07-28T12:20:55.367 に答える