次の方法で共有


sys.dm_exec_sql_text

更新 : 2006 年 12 月 12 日

指定された sql_handle が示す SQL バッチのテキストを返します。このテーブル値関数は、システム関数 fn_get_sql に代わるものです。

構文

sys.dm_exec_sql_text(sql_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

返されるテーブル

列名 データ型 説明

dbid

smallint

データベースの ID。

アドホック SQL ステートメントおよび準備された SQL ステートメントの場合は NULL になります。

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 になります。

解説

バッチでは、SQL ハンドルは SQL テキストに基づくハッシュ値です。ストアド プロシージャ、トリガ、または関数などのデータベース オブジェクトでは、SQL ハンドルはデータベース ID、オブジェクト ID、オブジェクト番号から取得します。

権限

サーバーに対する VIEW SERVER STATE 権限が必要です。

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;

参照

関連項目

動的管理ビューと動的管理関数
実行関連の動的管理ビューおよび関数
sys.dm_exec_query_stats
sys.dm_exec_requests
sys.dm_exec_cursors
sys.dm_exec_xml_handles
sys.dm_exec_query_memory_grants

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

変更内容 :
  • sql_handle の説明を更新しました。
  • 準備されたステートメントの場合は dbidobjectid、および number 列に NULL が返されるという説明を追加しました。

2006 年 4 月 14 日

変更内容 :
  • 返される列の説明を更新し、NULL 値の定義を追加。
  • 例を修正。

2005 年 12 月 5 日

変更内容 :
  • text フィールドのデータ型を text から nvarchar(max) に変更。