sys.dm_exec_sql_text (Transact-SQL)
指定された sql_handle が示す SQL バッチのテキストを返します。 このテーブル値関数は、システム関数 fn_get_sql に代わるものです。
構文
sys.dm_exec_sql_text(sql_handle | plan_handle)
引数
sql_handle
検索するバッチの SQL ハンドルを指定します。 sql_handle のデータ型は varbinary(64) です。 sql_handle は、次の動的管理オブジェクトから取得できます。sys.dm_exec_query_stats
sys.dm_exec_requests
sys.dm_exec_cursors
sys.dm_exec_xml_handles
sys.dm_exec_query_memory_grants
sys.dm_exec_connections
plan_handle
クエリ プランの識別子です。詳細については、「sys.dm_exec_text_query_plan (Transact-SQL)」を参照してください。
返されるテーブル
列名 |
データ型 |
説明 |
---|---|---|
dbid |
smallint |
データベースの ID。 アドホック SQL ステートメントおよび準備された SQL ステートメントの場合、ステートメントがコンパイルされたデータベースの ID。 |
objectid |
int |
オブジェクトの ID。 アドホック SQL ステートメントおよび準備された SQL ステートメントの場合は NULL になります。 |
number |
smallint |
番号付きストアド プロシージャの場合、ストアド プロシージャの番号。 詳細については、「sys.numbered_procedures (Transact-SQL)」を参照してください。 アドホック SQL ステートメントおよび準備された SQL ステートメントの場合は NULL になります。 |
encrypted |
bit |
1 = SQL テキストは暗号化されています。 0 = SQL テキストは暗号化されていません。 |
text |
nvarchar(max) |
SQL クエリのテキスト。 暗号化されているオブジェクトの場合は NULL になります。 |
権限
サーバーに対する VIEW SERVER STATE 権限が必要です。
説明
バッチでは、SQL ハンドルは SQL テキストに基づくハッシュ値です。 ストアド プロシージャ、トリガー、関数などのデータベース オブジェクトでは、SQL ハンドルはデータベース ID、オブジェクト ID、オブジェクト番号から取得します。 plan_handle はバッチ全体のコンパイル済みプランから取得したハッシュ値です。
使用例
A. 平均 CPU 時間に基づく上位 5 つのクエリに関する情報を取得する
次の例では、上位 5 つのクエリにかかった平均 CPU 時間と SQL ステートメントのテキストを返します。
SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY total_worker_time/execution_count DESC;
B. バッチ実行の統計を取得する
次の例では、バッチで実行されている SQL クエリのテキストを返し、クエリに関する統計情報を提供します。
SELECT s2.dbid,
s1.sql_handle,
(SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,
( (CASE WHEN statement_end_offset = -1
THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)
ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,
execution_count,
plan_generation_num,
last_execution_time,
total_worker_time,
last_worker_time,
min_worker_time,
max_worker_time,
total_physical_reads,
last_physical_reads,
min_physical_reads,
max_physical_reads,
total_logical_writes,
last_logical_writes,
min_logical_writes,
max_logical_writes
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
WHERE s2.objectid is null
ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;
関連項目
参照
実行関連の動的管理ビューおよび関数 (Transact-SQL)
sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_cursors (Transact-SQL)