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

OBJECTPROPERTY()を使用して、オブジェクトがSQLServerのユーザー定義テーブルであるかどうかを確認します。

    OBJECTPROPERTY()を使用できます SQL Serverの関数を使用して、オブジェクトがユーザー定義テーブルであるかどうかを確認します。

    これを行うには、最初の引数としてオブジェクトIDを渡し、IsUserTable 2番目の引数として。この関数は1を返します または0 ユーザー定義のテーブルかどうかによって異なります。

    1の戻り値 であることを意味します ユーザー定義のテーブル、および0の値 そうではないことを意味します。

    例1-基本的な使用法

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

    USE WideWorldImportersDW;
    SELECT OBJECTPROPERTY(1013578649, 'IsUserTable') AS [IsUserTable];
    

    結果:

    +---------------+
    | IsUserTable   |
    |---------------|
    | 1             |
    +---------------+
    

    この場合、 WideWorldImportersDW データベースには、提供されたIDを持つオブジェクトがあり、それはユーザー定義のテーブルです。

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

    オブジェクトの名前はわかっているがIDはわかっていない場合は、OBJECT_ID()を使用できます。 名前に基づいてIDを取得する関数。

    例:

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

    結果:

    +---------------+
    | IsUserTable   |
    |---------------|
    | 1             |
    +---------------+
    

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

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

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

    結果:

    +-------------+---------------+
    | Object ID   | IsUserTable   |
    |-------------+---------------|
    | 1013578649  | 1             |
    +-------------+---------------+
    

    例3–オブジェクトがユーザー定義テーブルではない場合

    オブジェクトがユーザーテーブルでない場合は、次のようになります。

    SELECT OBJECTPROPERTY(402100473, 'IsUserTable') AS [IsUserTable];
    

    結果:

    +---------------+
    | IsUserTable   |
    |---------------|
    | 0             |
    +---------------+
    

    この場合、データベースはします そのIDのオブジェクトがありますが、オブジェクトは実際にはストアドプロシージャ(ユーザー定義テーブルではない)であるため、否定的な結果が得られます。

    ここでもOBJECT_ID()を使用しています 。

    SELECT 
      OBJECT_ID('Sequences.ReseedAllSequences') AS [Object ID],
      OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsUserTable') AS [IsUserTable],
      OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsProcedure') AS [IsProcedure];
    

    結果:

    +-------------+---------------+---------------+
    | Object ID   | IsUserTable   | IsProcedure   |
    |-------------+---------------+---------------|
    | 402100473   | 0             | 1             |
    +-------------+---------------+---------------+
    

    また、オブジェクトがストアドプロシージャであるかどうかを確認し、結果が正であるかどうかを確認しました。

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

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

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

    結果:

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

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

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


    1. PostgreSQLでのJSONBの使用:PostgreSQLでJSONデータを効果的に保存およびインデックス付けする方法

    2. MariaDBでのWEEK()のしくみ

    3. SQL再帰CTE:プロパティによってリンクされたオブジェクトの検索

    4. AccessのDAOレコードセットの基礎としてのSQLServerパススルークエリ