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

SQLServerの結果セットで返される列のデータ型を確認する

    SQL Serverでは、クエリから結果セットのメタデータを取得する方法がいくつかあります。これには、T-SQLクエリによって返される列のデータ型が含まれます。

    特に、sys.dm_exec_describe_first_result_set システム動的管理機能は、このようなタスクに適しています。

    sys.dm_exec_describe_first_result_setの使用方法を示す例を次に示します。 特定のT-SQLクエリによって返される各列に関するデータ型情報を取得します。

    SELECT 
        name,
        user_type_name,
        system_type_name,
        max_length,
        [precision],
        scale
    FROM sys.dm_exec_describe_first_result_set(
        'select * from Clients', 
        null, 
        0);

    結果:

    +------------+------------------+--------------------+--------------+-------------+---------+
    | name       | user_type_name   | system_type_name   | max_length   | precision   | scale   |
    |------------+------------------+--------------------+--------------+-------------+---------|
    | ClientCode | clientcode       | varchar(8)         | 8            | 0           | 0       |
    | FirstName  | NULL             | varchar(60)        | 60           | 0           | 0       |
    | LastName   | NULL             | varchar(60)        | 60           | 0           | 0       |
    +------------+------------------+--------------------+--------------+-------------+---------+

    この場合、3つの行が返されます。各行は、分析しているクエリによって返される列を表します。

    列の1つがclientcodeと呼ばれるユーザー定義のデータ型エイリアスを使用していることに気付いたかもしれません。 。ユーザー定義のデータ型エイリアスを作成するときは、既存のシステム型に基づいています。これは上記の結果に反映されています。そのクライアントコードを見ることができます varchar(8)に基づいています 。

    sys.dm_exec_describe_first_result_set 関数は多くの列を返すので、すべての列を自由に含めて、他に役立つと思われる列があるかどうかを確認してください。 sys.dm_exec_describe_first_result_setも参照してください。 より詳細な説明とより多くの例のために働きます。

    sp_describe_first_result_setを使用することもできます 同じ情報を返すシステムストアドプロシージャ(sys.dm_exec_describe_first_result_setと同じアルゴリズムを使用します 。

    ストアドプロシージャの結果セット

    ストアドプロシージャによって返される列のデータ型を取得する場合は、sys.dm_exec_describe_first_result_set_for_objectを使用できます。 機能。

    この関数は前の関数と同じアルゴリズムを使用しますが、違いは、この関数が(実際のT-SQLバッチではなく)最初の引数としてストアドプロシージャまたはトリガーのIDを受け入れることです。

    したがって、次のように使用できます:

    SELECT 
        name,
        user_type_name,
        system_type_name,
        max_length,
        [precision],
        scale
    FROM sys.dm_exec_describe_first_result_set_for_object(
        OBJECT_ID('sp_BadDogs'),
        0);

    結果:

    +---------+------------------+--------------------+--------------+-------------+---------+
    | name    | user_type_name   | system_type_name   | max_length   | precision   | scale   |
    |---------+------------------+--------------------+--------------+-------------+---------|
    | DogId   | NULL             | int                | 4            | 10          | 0       |
    | DogName | NULL             | nvarchar(255)      | 510          | 0           | 0       |
    | GoodDog | NULL             | bit                | 1            | 1           | 0       |
    +---------+------------------+--------------------+--------------+-------------+---------+

    この場合、OBJECT_ID()を使用しました ストアドプロシージャのIDを返す関数。これにより、実際のIDを知る必要がなくなりました。

    この関数の詳細と例については、sys.dm_exec_describe_first_result_set_for_objectのしくみを参照してください。


    1. MicrosoftAccessWebアプリとデスクトップデータベース

    2. Prisma、データベースをクリアする方法

    3. Laravelの移行でタイムスタンプ列のデフォルト値を現在のタイムスタンプに設定するにはどうすればよいですか?

    4. SQLiteでのTime()関数のしくみ