sys.dm_exec_sql_text (Transact-SQL)sys.dm_exec_sql_text (Transact-SQL)

適用対象: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

指定されたsql_handleによって識別される SQL バッチのテキストを返します。Returns the text of the SQL batch that is identified by the specified sql_handle. このテーブル値関数は、システム関数 fn_get_sql に代わるものです。This table-valued function replaces the system function fn_get_sql.

構文Syntax

sys.dm_exec_sql_text(sql_handle | plan_handle)  

引数Arguments

sql_handlesql_handle
は、実行済みまたは現在実行中のバッチを一意に識別するトークンです。Is a token that uniquely identifies a batch that has executed or is currently executing. sql_handlevarbinary (64) です。sql_handle is varbinary(64).

Sql_handleは、次の動的管理オブジェクトから取得できます。The sql_handle can be obtained from the following dynamic management objects:

plan_handleplan_handle
は、実行され、そのプランがプランキャッシュに存在するか、現在実行中のバッチのクエリ実行プランを一意に識別するトークンです。Is a token that uniquely identifies a query execution plan for a batch that has executed and its plan resides in the plan cache, or is currently executing. plan_handlevarbinary (64) です。plan_handle is varbinary(64).

Plan_handleは、次の動的管理オブジェクトから取得できます。The plan_handle can be obtained from the following dynamic management objects:

返されるテーブルTable Returned

列名Column name データ型Data type [説明]Description
dbiddbid smallintsmallint データベースの ID。ID of database.

アドホック SQL ステートメントおよび準備された SQL ステートメントの場合、ステートメントがコンパイルされたデータベースの ID。For ad hoc and prepared SQL statements, the ID of the database where the statements were compiled.
objectidobjectid intint オブジェクトの ID。ID of object.

アドホック SQL ステートメントおよび準備された SQL ステートメントの場合は NULL になります。Is NULL for ad hoc and prepared SQL statements.
numbernumber smallintsmallint 番号付きストアド プロシージャの場合、ストアド プロシージャの番号。For a numbered stored procedure, this column returns the number of the stored procedure. 詳細については、「 sys. numbered_procedures (transact-sql)」を参照してください。For more information, see sys.numbered_procedures (Transact-SQL).

アドホック SQL ステートメントおよび準備された SQL ステートメントの場合は NULL になります。Is NULL for ad hoc and prepared SQL statements.
暗号encrypted bitbit 1 = SQL テキストは暗号化されています。1 = SQL text is encrypted.

0 = SQL テキストは暗号化されていません。0 = SQL text is not encrypted.
本文text nvarchar (max )nvarchar(max ) SQL クエリのテキスト。Text of the SQL query.

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

アクセス許可Permissions

サーバーに対する VIEW SERVER STATE 権限が必要です。Requires VIEW SERVER STATE permission on the server.

解説Remarks

アドホッククエリの場合、SQL ハンドルは、サーバーに送信される SQL テキストに基づくハッシュ値であり、任意のデータベースからのものである可能性があります。For ad hoc queries, the SQL handles are hash values based on the SQL text being submitted to the server, and can originate from any database.

ストアドプロシージャ、トリガー、関数などのデータベースオブジェクトでは、SQL ハンドルはデータベース ID、オブジェクト ID、およびオブジェクト番号から取得されます。For database objects such as stored procedures, triggers or functions, the SQL handles are derived from the database ID, object ID, and object number.

プランハンドルは、バッチ全体のコンパイル済みプランから派生したハッシュ値です。Plan handle is a hash value derived from the compiled plan of the entire batch.

注意

dbidは、アドホッククエリのsql_handleからは判断できません。dbid cannot be determined from sql_handle for ad hoc queries. アドホッククエリのdbidを確認するには、代わりにplan_handleを使用します。To determine dbid for ad hoc queries, use plan_handle instead.

Examples

A.A. 概念例Conceptual Example

次に、 sql_handleを直接またはクロス適用を使用して渡す方法を示す基本的な例を示します。The following is a basic example to illustrate passing a sql_handle either directly or with CROSS APPLY.

  1. アクティビティを作成します。Create activity.
    SQL Server Management StudioSQL Server Management Studio新しいクエリウィンドウで、次の t-sql を実行します。Execute the following T-SQL in a new query window in SQL Server Management StudioSQL Server Management Studio.

    -- Identify current spid (session_id)
    SELECT @@SPID;
    GO
    
    -- Create activity
      WAITFOR DELAY '00:02:00';
    
  2. クロス適用を使用しています。Using CROSS APPLY.
    Dm_exec_requestsからの sql_handle は、クロス適用を使用してdm_exec_sql_textに渡されます。The sql_handle from sys.dm_exec_requests will be passed to sys.dm_exec_sql_text using CROSS APPLY. 新しいクエリウィンドウを開き、手順 1. で識別された spid を渡します。Open a new query window and pass the spid identified in step 1. この例では59、spid はとなります。In this example the spid happens to be 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を直接渡しています。Passing sql_handle directly.
    Dm_exec_requestsからsql_handleを取得します。Acquire the sql_handle from sys.dm_exec_requests. 次に、 sql_handleを直接dm_exec_sql_textに渡します。Then, pass the sql_handle directly to sys.dm_exec_sql_text. 新しいクエリウィンドウを開き、手順 1. で識別した spid をdm_exec_requestsに渡します。Open a new query window and pass the spid identified in step 1 to sys.dm_exec_requests. この例では59、spid はとなります。In this example the spid happens to be 59. 次に、返されたsql_handleを引数としてsys. dm_exec_sql_textに渡します。Then pass the returned sql_handle as an argument to 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.B. 平均 CPU 時間による上位5つのクエリに関する情報を取得するObtain information about the top five queries by average CPU time

次の例では、上位 5 つのクエリにかかった平均 CPU 時間と SQL ステートメントのテキストを返します。The following example returns the text of the SQL statement and average CPU time for the top five queries.

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.C. バッチ実行の統計を指定するProvide batch-execution statistics

次の例では、バッチで実行されている SQL クエリのテキストを返し、クエリに関する統計情報を提供します。The following example returns the text of SQL queries that are being executed in batches and provides statistical information about them.

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;  

参照See also

動的管理ビューと動的管理関数 (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
実行関連の動的管理ビューおよび関数 (Transact-sql) Execution Related Dynamic Management Views and Functions (Transact-SQL)
dm_exec_query_stats (Transact-sql) sys.dm_exec_query_stats (Transact-SQL)
dm_exec_requests (Transact-sql) sys.dm_exec_requests (Transact-SQL)
dm_exec_cursors (Transact-sql) sys.dm_exec_cursors (Transact-SQL)
dm_exec_xml_handles (Transact-sql) sys.dm_exec_xml_handles (Transact-SQL)
dm_exec_query_memory_grants (Transact-sql) sys.dm_exec_query_memory_grants (Transact-SQL)
  Using dm_exec_text_query_plan (transact-sql) を使用するUsing APPLY   sys.dm_exec_text_query_plan (Transact-SQL)