sys.dm_exec_describe_first_result_set (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
この動的管理機能は、Transact-SQL ステートメントをパラメーターとして受け取り、ステートメントの最初の結果セットのメタデータを記述します。
sys.dm_exec_describe_first_result_set は、 sys.dm_exec_describe_first_result_set_for_object (Transact-SQL) と同じ結果セット定義を持ち、 sp_describe_first_result_set (Transact-SQL) に似ています。
構文
sys.dm_exec_describe_first_result_set(@tsql, @params, @include_browse_information)
引数
@tsql
1 つ以上の Transact-SQL ステートメント。 Transact-SQL_batch には、nvarchar(n) または nvarchar(max) を指定できます。
@params
@paramsは、sp_executesqlと同様に、Transact-SQL バッチのパラメーターの宣言文字列を提供します。 parameters には、nvarchar(n) または nvarchar(max) を指定できます。
Transact-SQL_batch に埋め込まれているすべてのパラメーターの定義が格納された 1 つの文字列です。 この文字列は Unicode 定数または Unicode 変数にする必要があります。 各パラメーター定義は、パラメーター名とデータ型で構成されます。 n は、追加のパラメーター定義を示すプレースホルダーです。 stmt で指定されるすべてのパラメーターは、@paramsで定義する必要があります。 Transact-SQL ステートメントまたはステートメント内のバッチにパラメーターが含まれていない場合、@params は不要です。 このパラメーターの既定値は NULL です。
@include_browse_information
1 に設定すると、各クエリはクエリに FOR BROWSE オプションがあるかのように分析されます。 追加のキー列とソース テーブル情報が返されます。
返されるテーブル
この一般的なメタデータは、結果セットとして返されます。 結果メタデータ内の列ごとに 1 行ずつ、次の表に示す形式で列の型と null 値の許容を示します。 各コントロールのパスに最初のステートメントが存在しない場合は、0 行の結果セットが返されます。
列名 | データ型 | 説明 |
---|---|---|
is_hidden | bit | 列が、結果セットに実際には表示されない参照および情報目的で追加される追加の列であることを指定します。 |
column_ordinal | int | 結果セット内の列の位置を示す序数を格納します。 最初の列の位置は 1 として指定されます。 |
name | sysname | 列の名前を確認できる場合は、その名前を格納します。 確認できない場合は、NULL が格納されます。 |
is_nullable | bit | 以下の値を含みます: 列で NULL が許可されている場合は値 1。 列で NULL が許可されていない場合は値 0。 列が NULL を許容することを確認できない場合は 1。 |
system_type_id | int | sys.types で指定されている列データ型のsystem_type_idを格納します。 CLR 型の場合は、system_type_name 列が NULL を返しても、この列は値 240 を返します。 |
system_type_name | nvarchar (256) | 列のデータ型に指定されている名前と引数 (長さ、有効桁数、小数点以下桁数など) を格納します。 データ型がユーザー定義の別名型の場合は、基になるシステム型がここで指定されます。 データ型が CLR ユーザー定義型の場合、この列には NULL が返されます。 |
max_length | smallint | 列の最大長 (バイト単位) です。 -1 = 列のデータ型は、varchar(max)、nvarchar(max)、varbinary(max)、または xml です。 text 列の場合、max_length の値は、16 または sp_tableoption 'text in row' によって設定された値になります。 |
有効桁数 (precision) | tinyint | 数値ベースの場合は、列の有効桁数です。 それ以外の場合は 0 を返します。 |
scale | tinyint | 数値ベースの場合は、列の小数点以下桁数です。 それ以外の場合は 0 を返します。 |
collation_name | sysname | 文字ベースの場合は、列の照合順序の名前です。 それ以外の場合は NULL を返します。 |
user_type_id | int | CLR 型と別名型の場合、sys.types で指定された列のデータ型の user_type_id を格納します。 それ以外の場合は NULL です。 |
user_type_database | sysname | CLR 型と別名型の場合、その型が定義されたデータベースの名前を格納します。 それ以外の場合は NULL です。 |
user_type_schema | sysname | CLR 型と別名型の場合、その型が定義されたスキーマの名前を格納します。 それ以外の場合は NULL です。 |
user_type_name | sysname | CLR 型と別名型の場合、その型の名前を格納します。 それ以外の場合は NULL です。 |
assembly_qualified_type_name | nvarchar (4000) | CLR 型の場合、その型を定義するアセンブリの名前とクラスを返します。 それ以外の場合は NULL です。 |
xml_collection_id | int | sys.columns で指定された列のデータ型の xml_collection_id を格納します。 返される型が XML スキーマ コレクションに関連付けられていない場合、この列は NULL を返します。 |
xml_collection_database | sysname | この型に関連付けられている XML スキーマ コレクションが定義されているデータベースを格納します。 返される型が XML スキーマ コレクションに関連付けられていない場合、この列は NULL を返します。 |
xml_collection_schema | sysname | この型に関連付けられている XML スキーマ コレクションが定義されているスキーマを格納します。 返される型が XML スキーマ コレクションに関連付けられていない場合、この列は NULL を返します。 |
xml_collection_name | sysname | この型に関連付けられている XML スキーマ コレクションの名前を格納します。 返される型が XML スキーマ コレクションに関連付けられていない場合、この列は NULL を返します。 |
is_xml_document | bit | 返されたデータ型が XML で、その型が XML フラグメントではなく完全な XML ドキュメント (ルート ノードを含む) であると保証される場合、1 を返します。 それ以外の場合は 0 を返します。 |
is_case_sensitive | bit | この列が、大文字と小文字を区別する文字列型の場合、1 を返します。 それ以外の場合は 0 を返します。 |
is_fixed_length_clr_type | bit | 列が固定長 CLR 型の場合は 1 を返します。 それ以外の場合は 0 を返します。 |
source_server | sysname | (リモート サーバーから発生する場合) 元のサーバーの名前です。 sys.servers で指定されている名前です。 この列がローカル サーバー上で発生した場合、または元のサーバーを特定できない場合は NULL を返します。 参照情報が要求された場合にのみ設定されます。 |
source_database | sysname | この結果内の列によって返された元のデータベースの名前です。 データベースを特定できない場合は NULL を返します。 参照情報が要求された場合にのみ設定されます。 |
source_schema | sysname | この結果内の列によって返された元のスキーマの名前です。 スキーマを特定できない場合は NULL を返します。 参照情報が要求された場合にのみ設定されます。 |
source_table | sysname | この結果内の列によって返された元のテーブルの名前です。 テーブルを特定できない場合は NULL を返します。 参照情報が要求された場合にのみ設定されます。 |
source_column | sysname | 結果列から返された元の列の名前です。 列を特定できない場合は NULL を返します。 参照情報が要求された場合にのみ設定されます。 |
is_identity_column | bit | この列が ID 列の場合は 1、それ以外の場合は 0 を返します。 ID 列であることを確認できない場合は NULL を返します。 |
is_part_of_unique_key | bit | 列が一意のインデックスの一部である場合は 1 を返し (一意制約とプライマリ制約を含む)、一意でない場合は 0 を返します。 一意インデックスの一部であることを確認できない場合は NULL を返します。 参照情報が要求された場合にのみ設定されます。 |
is_updateable | bit | この列が更新可能である場合は 1、それ以外の場合は 0 を返します。 更新可能であることを確認できない場合は NULL を返します。 |
is_computed_column | bit | この列が計算列の場合は 1、それ以外の場合は 0 を返します。 列が計算列であるかどうかを判断できない場合は NULL を返します。 |
is_sparse_column_set | bit | この列がスパース列の場合は 1、それ以外の場合は 0 を返します。 列がスパース列セットの一部であると判断できない場合は NULL を返します。 |
ordinal_in_order_by_list | smallint | この列の位置は ORDER BY リストにあります。 列が ORDER BY リストに表示されない場合、または ORDER BY リストを一意に決定できない場合は NULL を返します。 |
order_by_list_length | smallint | ORDER BY リストの長さ。 ORDER BY リストがない場合、または ORDER BY リストを一意に決定できない場合は、NULL が返されます。 この値は、sp_describe_first_result_set によって返されるすべての行に対して同じであることに注意してください。 |
order_by_is_descending | smallint NULL | ordinal_in_order_by_list が NULL でない場合、order_by_is_descending 列には、この列の ORDER BY 句の方向がレポートされます。 それ以外の場合は、NULL が報告されます。 |
error_number | int | 関数によって返されるエラー番号を格納します。 エラーが発生しなかった場合、列には NULL が含まれます。 |
error_severity | int | 関数によって返される重大度を格納します。 エラーが発生しなかった場合、列には NULL が含まれます。 |
error_state | int | 状態メッセージを格納します。 関数によって返されます。 エラーが発生しなかった場合、列には NULL が含まれます。 |
error_message | nvarchar(4096) | 関数によって返されるメッセージが格納されます。 エラーが発生しなかった場合、列には NULL が含まれます。 |
error_type | int | 返されるエラーを表す整数を格納します。 error_type_descにマップします。 「解説」の下のリストを参照してください。 |
error_type_desc | nvarchar(60) | 返されるエラーを表す短い大文字の文字列が含まれています。 error_typeにマップします。 「解説」の下のリストを参照してください。 |
解説
この関数は、 sp_describe_first_result_setと同じアルゴリズムを使用します。 詳細については、「 sp_describe_first_result_set (Transact-SQL)」を参照してください。
次の表に、エラーの種類とその説明を示します。
error_type | error_type | 説明 |
---|---|---|
1 | その他 | それ以外の方法で説明されていないすべてのエラー。 |
2 | SYNTAX | バッチ内で構文エラーが発生しました。 |
3 | CONFLICTING_RESULTS | 最初の 2 つのステートメントが競合しているため、結果を特定できませんでした。 |
4 | DYNAMIC_SQL | 動的 SQL によって最初の結果が返される可能性があるため、結果を特定できませんでした。 |
5 | CLR_PROCEDURE | CLR ストアド プロシージャが最初の結果を返す可能性があるため、結果を特定できませんでした。 |
6 | CLR_TRIGGER | CLR トリガーが最初の結果を返す可能性があるため、結果を特定できませんでした。 |
7 | EXTENDED_PROCEDURE | 拡張ストアド プロシージャが最初の結果を返す可能性があるため、結果を特定できませんでした。 |
8 | UNDECLARED_PARAMETER | 結果セットの 1 つ以上の列のデータ型が宣言されていないパラメーターに依存する可能性があるため、結果を特定できませんでした。 |
9 | 再帰 | バッチに再帰的なステートメントが含まれているため、結果を特定できませんでした。 |
10 | TEMPORARY_TABLE | バッチに一時テーブルが含まれており、 sp_describe_first_result_set でサポートされていないため、結果を特定できませんでした。 |
11 | UNSUPPORTED_STATEMENT | バッチに sp_describe_first_result_set でサポートされていないステートメント (FETCH、REVERT など) が含まれているため、結果を特定できませんでした。 |
12 | OBJECT_TYPE_NOT_SUPPORTED | 関数に渡される@object_idはサポートされていません (つまり、ストアド プロシージャではありません) |
13 | OBJECT_DOES_NOT_EXIST | 関数に渡された@object_idがシステム カタログに見つかりませんでした。 |
アクセス許可
引数 @tsql を実行する権限が必要です。
例
トピック sp_describe_first_result_set (Transact-SQL) のその他の例は、 sys.dm_exec_describe_first_result_setを使用するように調整できます。
A. 1 つの Transact-SQL ステートメントに関する情報を返す
次のコードは、Transact-SQL ステートメントの結果に関する情報を返します。
USE AdventureWorks2022;
GO
SELECT * FROM sys.dm_exec_describe_first_result_set
(N'SELECT object_id, name, type_desc FROM sys.indexes', null, 0) ;
B. プロシージャに関する情報を返す
次の例では、2 つの結果セットを返す pr_TestProc という名前のストアド プロシージャを作成します。 次に、 sys.dm_exec_describe_first_result_set がプロシージャ内の最初の結果セットに関する情報を返す例を示します。
USE AdventureWorks2022;
GO
CREATE PROC Production.TestProc
AS
SELECT Name, ProductID, Color FROM Production.Product ;
SELECT Name, SafetyStockLevel, SellStartDate FROM Production.Product ;
GO
SELECT * FROM sys.dm_exec_describe_first_result_set
('Production.TestProc', NULL, 0) ;
C: 複数のステートメントを含むバッチからメタデータを返す
次の例では、2 つの Transact-SQL ステートメントを含むバッチを評価します。 結果セットは、返される最初の結果セットを表します。
USE AdventureWorks2022;
GO
SELECT * FROM sys.dm_exec_describe_first_result_set(
N'SELECT CustomerID, TerritoryID, AccountNumber FROM Sales.Customer WHERE CustomerID = @CustomerID;
SELECT * FROM Sales.SalesOrderHeader;',
N'@CustomerID int', 0) AS a;
GO
参照
sp_describe_first_result_set (Transact-SQL)
sp_describe_undeclared_parameters (Transact-SQL)
sys.dm_exec_describe_first_result_set_for_object (Transact-SQL)