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のしくみを参照してください。