sql >> データベース >  >> RDS >> Sqlserver

OBJECTPROPERTY()を使用して、SQLServerでテーブルに外部キーがあるかどうかを確認します

    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が発生します。


    1. ユーザーIDをPostgreSQLトリガーに渡す

    2. 大規模なMySQLインポートの接続タイムアウトを防ぐ方法

    3. PostgreSQL9.4のjsonbタイプをfloatに変換する方法

    4. SQL Serverの2つの日付間の時間差(10進数)を計算するにはどうすればよいですか?