連載
» 2021年10月04日 05時00分 公開

ステートメントの最初の結果セットに関するメタデータを出力するSQL Server動的管理ビューレファレンス(48)

「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、ステートメントの最初の結果セットに関するメタデータの出力について解説します。

[伊東敏章,@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

SQL Server動的管理ビュー一覧

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で使用可能な動的管理ビューについて、動作概要や出力内容などを紹介していきます。今回は動的管理ビュー「sys.dm_exec_describe_first_result_set」における、ステートメントの最初の結果セットに関するメタデータの出力について解説します。対応バージョンは、SQL Server 2012以降です。

概要

 クライアントアプリケーションなどで、クエリの実行結果の列情報をクエリの実行前に取得したい場合があります。

 「sys.dm_exec_describe_first_result_set」動的管理関数を使用することで、クエリを実行することなく、Transact-SQLステートメントの最初の結果セットに関するメタデータ(列の情報など)を出力できます。

構文と引数

構文 sys.dm_exec_describe_first_result_set(@tsql, @params,@include_browse_information)

引数 説明
@tsql 1つ以上のTransact-SQLステートメント
@params パラメータ宣言文字列。「sp_executesql」と同様に指定
パラメータを含まない場合「@params」は不要
既定値は「NULL」
@include_browse_information 「1」に設定すると、キー列やソーステーブル情報などの追加情報が返される

出力内容

列名 データ型 説明
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型の場合は「240」を返す
system_type_name nvarchar(256) 列のデータ型の名前と引数(長さ、有効桁数、小数点以下桁数など)
データ型がユーザー定義の別名型の場合は、基になるシステム型が返される
データ型がCLRユーザー定義型の場合は「NULL」が返される
max_length smallint 列の最大長(バイト単位)
「-1=」列のデータ型がvarchar(max)、nvarchar(max)、varbinary(max)またはxml
テキストの場合、「max_length」の値は「16」または設定された値になる
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」。この値は返される全ての行に対して同じ
order_by_is_descending smallint この列の「ORDER BY」句の方向。「ordinal_in_order_by_list」が「NULL」の場合は「NULL」
error_number int 関数によって返されるエラー番号。エラーが発生しなかった場合は「NULL」
error_severity int 関数によって返される重大度。エラーが発生しなかった場合は「NULL」
error_state int 関数によって返される状態メッセージ。エラーが発生しなかった場合は「NULL」
error_message nvarchar(4096) 関数によって返されるメッセージ。エラーが発生しなかった場合は「NULL」
error_type int 返されるエラータイプを表す整数
 1:MISC
 2:SYNTAX
 3:CONFLICTING_RESULTS
 4:DYNAMIC_SQL
 5:CLR_PROCEDURE
 6:CLR_TRIGGER
 7:EXTENDED_PROCEDURE
 8:UNDECLARED_PARAMETER
 9:RECURSION
 10:TEMPORARY_TABLE
 11:UNSUPPORTED_STATEMENT
 12:OBJECT_TYPE_NOT_SUPPORTED
 13:OBJECT_DOES_NOT_EXIST
error_type_desc nvarchar(60) 「error_type」の説明

動作例

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。