連載
ステートメントの最初の結果セットに関するメタデータを出力する:SQL Server動的管理ビューレファレンス(48)
「Microsoft 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.
関連記事
- SQL Serverの動的管理ビューとは?
「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。 - 「DMV(Dynamic Management View)」でパフォーマンス遅延の「原因」を調べる
本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「処理遅延の原因を追求する“DMVの使い方”」を説明します。 - SQL Serverの動きを制御する「トレースフラグ」とは何か
「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「トレースフラグ」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。初回は「トレースフラグとはそもそも何か」を解説します。