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

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SQL のテキストがされているバッチを返しますが、指定した識別sql_handleします。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.


sys.dm_exec_sql_text(sql_handle | plan_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:

実行されるバッチのクエリ実行プランを一意に識別するトークンと、そのプランがプラン キャッシュ内に存在または現在実行しています。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 ステートメントに 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 ステートメントに NULL です。Is NULL for ad hoc and prepared SQL statements.
encryptedencrypted bitbit 1 = SQL テキストは暗号化されています。1 = SQL text is encrypted.

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

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


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


アドホック クエリでは、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.


A.A. 概念の例Conceptual Example

渡すことを示すために基本的な例を次に、 sql_handle 、直接またはCROSS APPLYします。The following is a basic example to illustrate passing a sql_handle either directly or with CROSS APPLY.

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

    -- Identify current spid (session_id)
    -- Create activity
      WAITFOR DELAY '00:02:00';
  2. 使用してCROSS APPLYします。Using CROSS APPLY.
    Sql_handle sys.dm_exec_requestsに渡されるsys.dm_exec_sql_textを使用してCROSS APPLYします。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. この例で、spid の値がある59します。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.
    取得、 sql_handleからsys.dm_exec_requestsします。Acquire the sql_handle from sys.dm_exec_requests. 次に、渡す、 sql_handleに直接sys.dm_exec_sql_textします。Then, pass the sql_handle directly to sys.dm_exec_sql_text. 新しいクエリ ウィンドウを開きを手順 1. で識別される、spid の値を渡すsys.dm_exec_requestsします。Open a new query window and pass the spid identified in step 1 to sys.dm_exec_requests. この例で、spid の値がある59します。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,   
    (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,  
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)
sys.dm_exec_query_stats (TRANSACT-SQL) sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL) sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_cursors (TRANSACT-SQL) sys.dm_exec_cursors (Transact-SQL)
sys.dm_exec_xml_handles (TRANSACT-SQL) sys.dm_exec_xml_handles (Transact-SQL)
sys.dm_exec_query_memory_grants (TRANSACT-SQL) sys.dm_exec_query_memory_grants (Transact-SQL)
使用する   sys.dm_exec_text_query_plan (TRANSACT-SQL)Using APPLY   sys.dm_exec_text_query_plan (Transact-SQL)