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

OBJECTPROPERTY()を使用して、SQLServerでテーブルにDEFAULT制約があるかどうかを確認します。

    OBJECTPROPERTY()を使用できます SQL Serverの関数を使用して、テーブルにDEFAULT制約があるかどうかを確認します。

    これを行うには、最初の引数としてテーブルのオブジェクトIDを渡し、TableHasDefaultCnst 2番目の引数として。この関数は1を返します または0 DEFAULT制約があるかどうかによって異なります。

    1の戻り値 これは、テーブルにDEFAULT制約があり、値が0であることを意味します。 そうではないことを意味します。

    例1-基本的な使用法

    簡単な例を次に示します。

    USE WideWorldImportersDW;
    SELECT OBJECTPROPERTY(1141579105, 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
    

    結果:

    +-----------------------+
    | TableHasDefaultCnst   |
    |-----------------------|
    | 1                     |
    +-----------------------+
    

    この場合、 WideWorldImportersDW データベースには、提供されたIDを持つテーブルがあり、DEFAULT制約があります。

    例2–オブジェクトIDの取得

    テーブルの名前はわかっているがIDはわからない場合は、OBJECT_ID()を使用できます。 名前に基づいてIDを取得する関数。

    例:

    SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
    

    結果:

    +-----------------------+
    | TableHasDefaultCnst   |
    |-----------------------|
    | 1                     |
    +-----------------------+
    

    これは前の例と同じオブジェクトです。

    ここでも、IDが個別に出力されます。

    SELECT 
      OBJECT_ID('Dimension.City') AS [Object ID],
      OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
    

    結果:

    +-------------+-----------------------+
    | Object ID   | TableHasDefaultCnst   |
    |-------------+-----------------------|
    | 1013578649  | 1                     |
    +-------------+-----------------------+
    

    例3–テーブルにデフォルトの制約がない場合

    テーブルにDEFAULT制約がない場合は、次のようになります。

    SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Movement'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
    

    結果:

    +-----------------------+
    | TableHasDefaultCnst   |
    |-----------------------|
    | 0                     |
    +-----------------------+
    

    この場合、オブジェクトはテーブルであり、DEFAULT制約がないだけです。

    例4–オブジェクトがテーブルではない場合

    データベースにIDを持つオブジェクトが含まれているが、そのオブジェクトがテーブルではない場合は、次のようになります。

    SELECT OBJECTPROPERTY(
        OBJECT_ID('Sequences.ReseedAllSequences'), 
        'TableHasDefaultCnst') AS [TableHasDefaultCnst];
    

    結果:

    +-----------------------+
    | TableHasDefaultCnst   |
    |-----------------------|
    | NULL                  |
    +-----------------------+
    

    例5–オブジェクトが存在しない

    SQL Serverは、オブジェクトIDが現在のデータベースコンテキストにあると想定します。別のデータベースからオブジェクトIDを渡すと、NULLの結果が得られるか、誤った結果が得られます。

    SELECT 
      OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasDefaultCnst') AS [InvalidObject],
      OBJECTPROPERTY(12345678, 'TableHasDefaultCnst') AS [12345678];
    

    結果:

    +-----------------+------------+
    | InvalidObject   | 12345678   |
    |-----------------+------------|
    | NULL            | NULL       |
    +-----------------+------------+
    

    この場合、データベースにはその名前またはIDのオブジェクトが含まれていないため、結果はNULLになります。

    エラーが発生した場合、またはオブジェクトを表示する権限がない場合にもNULLが発生します。


    1. TimescaleDBのパフォーマンス監視

    2. SQLServer-NATURAL JOIN / x JOIN y USING(フィールド)の欠如

    3. PL / SQLにファイルが存在するかどうかを確認する方法は?

    4. TIMESTAMP()の例– MySQL