OBJECTPROPERTY()
を使用できます SQL Serverの関数を使用して、テーブルが外部キーによって参照されているかどうかを確認します。
これを行うには、最初の引数としてテーブルのオブジェクトIDを渡し、TableHasForeignRef
2番目の引数として。この関数は1
を返します または0
外部キーによって参照されているかどうかによって異なります。
1
の戻り値 テーブルがであることを意味します 外部キーによって参照され、値が0
そうではないことを意味します。
ここに示されている例では、外部キーやそのテーブルなどはリストされていないことに注意してください。これらは、テーブルが外部キーによって参照されているかどうかをテストするために使用できるtrue/false値を返すだけです。特定のテーブルを参照するすべての外部キーを一覧表示する必要がある場合は、SQLServerで特定のテーブルを参照するすべての外部キーを返すを参照してください。その記事の例には、各外部キー、外部キーテーブル、および主キーテーブルがリストされています。
例1-基本的な使用法
簡単な例を次に示します。
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1141579105, 'TableHasForeignRef') AS [TableHasForeignRef];
結果:
+----------------------+ | TableHasForeignRef | |----------------------| | 1 | +----------------------+
この場合、 WideWorldImportersDW データベースには、提供されたIDを持つテーブルがあり、外部キーによって参照されています。
例2–オブジェクトIDの取得
テーブルの名前はわかっているがIDはわかっていない場合は、OBJECT_ID()
を使用できます。 名前に基づいてIDを取得する関数。
例:
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];
結果:
+----------------------+ | TableHasForeignRef | |----------------------| | 1 | +----------------------+
これは前の例と同じオブジェクトです。
ここでも、IDが個別に出力されます。
SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];
結果:
+-------------+----------------------+ | Object ID | TableHasForeignRef | |-------------+----------------------| | 1013578649 | 1 | +-------------+----------------------+
例3–テーブルが外部キーによって参照されていない場合
テーブルが外部キーによって参照されていない場合は、次のようになります。
SELECT OBJECTPROPERTY(OBJECT_ID('Integration.Lineage'), 'TableHasForeignRef') AS [TableHasForeignRef];
結果:
+----------------------+ | TableHasForeignRef | |----------------------| | 0 | +----------------------+
この場合、オブジェクトはテーブルであり、外部キーによって参照されていないだけです。
例4–オブジェクトがテーブルではない場合
データベースにIDを持つオブジェクトが含まれているが、そのオブジェクトがテーブルではない場合は、次のようになります。
SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignRef') AS [TableHasForeignRef];
結果:
+----------------------+ | TableHasForeignRef | |----------------------| | NULL | +----------------------+
例5–オブジェクトが存在しない
SQL Serverは、オブジェクトIDが現在のデータベースコンテキストにあると想定します。別のデータベースからオブジェクトIDを渡すと、NULLの結果が得られるか、誤った結果が得られます。
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasForeignRef') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasForeignRef') AS [12345678];
結果:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
この場合、データベースにはその名前またはIDのオブジェクトが含まれていないため、結果はNULLになります。
エラーが発生した場合、またはオブジェクトを表示する権限がない場合にもNULLが発生します。