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

OBJECTPROPERTY()を使用して、SQLServerの外部キーによってテーブルが参照されているかどうかを確認します。

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


    1. SQLクエリの最適化:パフォーマンスを向上させるためのベストプラクティス

    2. MySQL/MariaDB-サブクエリ内で並べ替え

    3. Postgresqlのデータベース照合、Ctypeを変更します

    4. SQLServerのメッセージ8116「引数データ型の日付が部分文字列関数の引数1に対して無効です」を修正しました