sys.dm_exec_describe_first_result_set_for_object (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

この動的管理機能は、パラメーターとして @object_id を受け取り、その ID を持つモジュールの最初の結果メタデータを記述します。 指定する @object_id には、Transact-SQL ストアド プロシージャまたは Transact-SQL トリガーの ID を指定できます。 その他のオブジェクト (ビュー、テーブル、関数、CLR プロシージャなど) の ID の場合、結果のエラー列にエラーが指定されます。

sys.dm_exec_describe_first_result_set_for_object は、 sys.dm_exec_describe_first_result_set (Transact-SQL) と同じ結果セット定義を持ち、 sp_describe_first_result_set (Transact-SQL) に似ています。

Transact-SQL 構文表記規則

構文

  
sys.dm_exec_describe_first_result_set_for_object   
    ( @object_id , @include_browse_information )  

引数

@object_id
Transact-SQL ストアド プロシージャまたは Transact-SQL トリガーの @object_id 。 @object_id のデータ型は int 型です。

@include_browse_information
@include_browse_information は type bit です。 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_ID_NOT_SUPPORTED 関数に渡される @object_id はサポートされていません (つまり、ストアド プロシージャではありません)
13 OBJECT_ID_DOES_NOT_EXIST 関数に渡された @object_id がシステム カタログに見つかりませんでした。

アクセス許可

@tsql引数を実行するためのアクセス許可が必要です。

A. 参照情報ありおよび参照情報なしでメタデータを返す

次の例では、2 つの結果セットを返す TestProc2 という名前のストアド プロシージャを作成します。 次に、この例では、 sys.dm_exec_describe_first_result_set は、参照情報の有無にかかわらず、プロシージャ内の最初の結果セットに関する情報を返します。

CREATE PROC TestProc2  
AS  
SELECT object_id, name FROM sys.objects ;  
SELECT name, schema_id, create_date FROM sys.objects ;  
GO  
  
SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 0) ;  
SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 1) ;  
GO  

B. sys.dm_exec_describe_first_result_set_for_object関数とテーブルまたはビューの組み合わせ

次の例では、sys.procedures システム カタログ ビューと sys.dm_exec_describe_first_result_set_for_object 関数の両方を使用して、 AdventureWorks2022 データベース内のすべてのストアド プロシージャの結果セットのメタデータを表示します。

USE AdventureWorks2022;  
GO  
  
SELECT p.name, r.*   
FROM sys.procedures AS p  
CROSS APPLY sys.dm_exec_describe_first_result_set_for_object(p.object_id, 0) AS r;  
GO  
  

参照

sp_describe_first_result_set (Transact-SQL)
sp_describe_undeclared_parameters (Transact-SQL)
sys.dm_exec_describe_first_result_set (Transact-SQL)