「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、オブジェクトの最初の結果セットに関するメタデータの出力について解説します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
##本文
本連載では、「Microsoft SQL Server(以下、SQL Server)」で使用可能な動的管理ビューについて、動作概要や出力内容などを紹介していきます。今回は動的管理ビュー「sys.dm_exec_describe_first_result_set_for_object」における、オブジェクトの最初の結果セットに関するメタデータの出力について解説します。対応バージョンは、SQL Server 2016以降です。
「sys.dm_exec_describe_first_result_set」では、クエリを実行することなくクエリの実行結果の列情報を取得できました。引数にストアドプロシージャ名を指定することで、ストアドプロシージャの実行結果の列情報を取得することもできました。
「sys.dm_exec_describe_first_result_set_for_object」はストアドプロシージャなどのオブジェクト名ではなく、オブジェクトIDを引数に指定することで実行結果の列情報に関する情報を出力します。
構文 sys.dm_exec_describe_first_result_set_for_object(@object_id, @include_browse_information)
引数 | 説明 |
---|---|
@object_id | ストアドプロシージャやトリガーのオブジェクトID |
@include_browse_information | 「1」に設定すると、キー列やソーステーブル情報などの追加情報が返される |
列名 | データ型 | 説明 |
---|---|---|
is_hidden | bit | 実際に結果セットには表示されないかどうかを示す |
column_ordinal | int | 結果セット内の列の位置を示す序数 |
name | sysname | 列の名前 |
is_nullable | bit | 列でNULLが許容されている場合は「1」、「NULL」を許容しない場合は「0」 |
system_type_id | int | データ型のID |
system_type_name | nvarchar(256) | データ型の名前 |
max_length | smallint | バイト単位の列の最大長 |
precision | tinyint | 数値ベースの列の有効桁数 |
scale | tinyint | 数値ベースの列の小数点以下桁数 |
collation_name | sysname | 文字ベースの列の照合順序の名前 |
user_type_id | int | CLR型と別名型のデータ型のID |
user_type_database | sysname | CLR型と別名型のデータベースの名前 |
user_type_schema | sysname | CLR型と別名型のスキーマの名前 |
user_type_name | sysname | CLR型と別名型の名前 |
assembly_qualified_type_name | nvarchar(4000) | CLR型のアセンブリの名前とクラス |
xml_collection_id | int | XMLスキーマコレクションのコレクションID |
xml_collection_database | sysname | XMLスキーマコレクションのデータベースの名前 |
xml_collection_schema | sysname | XMLスキーマコレクションのスキーマの名前 |
xml_collection_name | sysname | XMLスキーマコレクションの名前 |
is_xml_document | bit | ルートノードを含むXMLドキュメントの場合は「1」、それ以外の場合は「0」 |
is_case_sensitive | bit | 列が大文字と小文字を区別する文字列型の場合は「1」、それ以外の場合は「0」 |
is_fixed_length_clr_type | bit | 固定長のCLR型の場合は「1」、それ以外の場合は「0」 |
source_server | sysname | 「@include_browse_information」が「1」の場合は元のサーバの名前 |
source_database | sysname | 「@include_browse_information」が「1」の場合は元のデータベースの名前 |
source_schema | sysname | 「@include_browse_information」が「1」の場合は元のスキーマの名前 |
source_table | sysname | 「@include_browse_information」が「1」の場合は元のテーブルの名前 |
source_column | sysname | 「@include_browse_information」が「1」の場合は元の列の名前 |
is_identity_column | bit | ID列の場合は「1」、それ以外の場合は「0」 |
is_part_of_unique_key | bit | 「@include_browse_information」が「1」の場合、一意インデックスの一部である場合は「1」、それ以外の場合は「0」 |
is_updateable | bit | 更新可能である場合は「1」、それ以外の場合は「0」 |
is_computed_column | bit | 計算列の場合は「1」、それ以外の場合は「0」 |
is_sparse_column_set | bit | スパース列の場合は「1」、それ以外の場合は「0」 |
ordinal_in_order_by_list | smallint | 「ORDER BY」リストにおけるこの列の位置 |
order_by_list_length | smallint | 「ORDER BY」リストの長さ |
order_by_is_descending | smallint | 「ORDER BY」句の方向 |
error_number | int | 関数によって返されるエラー番号 |
error_severity | int | 関数によって返される重大度 |
error_state | int | 関数によって返される状態 |
error_message | nvarchar(4096) | 関数によって返されるメッセージ |
error_type | int | 関数によって返されるエラータイプID |
error_type_desc | nvarchar(60) | 関数によって返されるエラータイプ |
結果セットを2つ返すストアドプロシージャを作成し、「sys.dm_exec_describe_first_result_set_for_object」を実行すると、「sys.dm_exec_describe_first_result_set」と同じく最初の結果セットに関するメタデータが出力されました(図1)。
「@include_browse_information」に「1」を指定して実行すると、「source_xxx」の列と「is_part_of_unique_key」列の追加情報が出力されました(図2)。
正しく結果セットを返さないストアドプロシージャや存在しないオブジェクトIDを引数に使用して「sys.dm_exec_describe_first_result_set_for_object」を実行すると、ほとんどの列が「NULL」となり、「error_xxx」の列にエラーの詳細が出力されます(図3)。
※本Tipsは、「Windows Server 2019」上に「SQL Server 2019 RC1」をインストールした環境を想定して解説しています。
日本ユニシス株式会社所属。Microsoft MVP for Data Platform(2017〜)。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。
日本ユニシス株式会社所属。入社以来SQL Server一筋で評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。社内のプログラミングコンテストで4回の優勝経験も持つ。趣味は輪行で週末は自転車を持っての旅行。目標は色々な日本百選を制覇すること。
Copyright © ITmedia, Inc. All Rights Reserved.