sys.dm_exec_sql_text (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース

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

構文

sys.dm_exec_sql_text(sql_handle | plan_handle)  

引数

sql_handle
は、実行済みまたは現在実行中のバッチを一意に識別するトークンです。 sql_handlevarbinary (64) です。

Sql_handle は、次の動的管理オブジェクトから取得できます。

plan_handle
は、実行され、そのプランがプランキャッシュに存在するか、現在実行中のバッチのクエリ実行プランを一意に識別するトークンです。 plan_handlevarbinary (64) です。

Plan_handle は、次の動的管理オブジェクトから取得できます。

返されるテーブル

列名 データ型 説明
dbid smallint データベースの ID。

アドホック SQL ステートメントおよび準備された SQL ステートメントの場合、ステートメントがコンパイルされたデータベースの ID。
objectid int オブジェクトの ID。

アドホック SQL ステートメントおよび準備された SQL ステートメントの場合は NULL になります。
number smallint 番号付きストアド プロシージャの場合、ストアド プロシージャの番号。 詳細については、「 sys.numbered_procedures (transact-sql)」を参照してください。

アドホック SQL ステートメントおよび準備された SQL ステートメントの場合は NULL になります。
暗号 bit 1 = SQL テキストは暗号化されています。

0 = SQL テキストは暗号化されていません。
text nvarchar (max ) SQL クエリのテキスト。

暗号化されているオブジェクトの場合は NULL になります。

アクセス許可

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

コメント

アドホッククエリの場合、SQL ハンドルは、サーバーに送信される SQL テキストに基づくハッシュ値であり、任意のデータベースからのものである可能性があります。

ストアドプロシージャ、トリガー、関数などのデータベースオブジェクトでは、SQL ハンドルはデータベース ID、オブジェクト ID、およびオブジェクト番号から取得されます。

プランハンドルは、バッチ全体のコンパイル済みプランから派生したハッシュ値です。

注意

dbid は、アドホッククエリの sql_handle からは判断できません。 アドホッククエリの dbid を確認するには、代わりに plan_handle を使用します。

A. 概念例

次に、 sql_handle を直接または クロス適用 を使用して渡す方法を示す基本的な例を示します。

  1. アクティビティを作成します。
    の新しいクエリウィンドウで、次の T-sql を実行 SQL Server Management Studio します。

    -- Identify current spid (session_id)
    SELECT @@SPID;
    GO
    
    -- Create activity
      WAITFOR DELAY '00:02:00';
    
  2. クロス適用 を使用しています。
    Sys.dm_exec_requests からの sql_handle は、クロス適用 を使用して sys.dm_exec_sql_text に渡されます。 新しいクエリウィンドウを開き、手順 1. で識別された spid を渡します。 この例では、spid はとなり 59 ます。

    SELECT t.*
    FROM sys.dm_exec_requests AS r
    CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
    WHERE session_id = 59 -- modify this value with your actual spid
    
  3. Sql_handle を直接渡しています。
    Sys.dm_exec_requests から sql_handle を取得します。 次に、 sql_handlesys.dm_exec_sql_text に直接渡します。 新しいクエリウィンドウを開き、手順 1. で識別した spid を sys.dm_exec_requests に渡します。 この例では、spid はとなり 59 ます。 次に、返された sql_handle を引数として sys.dm_exec_sql_text に渡します。

    -- acquire sql_handle
    SELECT sql_handle FROM sys.dm_exec_requests WHERE session_id = 59  -- modify this value with your actual spid
    
    -- pass sql_handle to sys.dm_exec_sql_text
    SELECT * FROM sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000) -- modify this value with your actual sql_handle
    

B. 平均 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;  

C. バッチ実行の統計を指定する

次の例では、バッチで実行されている 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)
実行関連の動的管理ビューおよび関数 (Transact-sql)
sys.dm_exec_query_stats (Transact-sql)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_cursors (Transact-sql)
sys.dm_exec_xml_handles (Transact-sql)
sys.dm_exec_query_memory_grants (Transact-sql)
APPLY を使用する
sys.dm_exec_text_query_plan (Transact-sql)