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