共用方式為


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_handlevarbinary(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

資料庫的識別碼。

特定和準備 SQL 陳述式的這個值是 NULL。

objectid

int

物件的識別碼。

特定和準備 SQL 陳述式的這個值是 NULL。

number

smallint

對於已編號的預存程序,這個資料行會傳回預存程序的編號。如需詳細資訊,請參閱<sys.numbered_procedures (Transact-SQL)>。

特定和準備 SQL 陳述式的這個值是 NULL。

encrypted

bit

1 = SQL 文字已加密。

0 = SQL 文字未加密。

text

nvarchar(max)

SQL 查詢的文字。

加密物件的這個值是 NULL。

備註

針對批次,SQL 控制代碼是依據 SQL 文字的雜湊值。針對資料庫物件 (如預存程序、觸發程序或函數),SQL 控制代碼是從資料庫識別碼、物件識別碼和物件編號衍生而來。

權限

需要伺服器的 VIEW SERVER STATE 權限。

範例

A. 取得按平均 CPU 時間排列之前五項查詢的相關資訊

下列範例會傳回 SQL 陳述式的文字以及前五項查詢的平均 CPU 時間。

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 的描述。
  • 新增準備陳述式會在 dbidobjectidnumber 資料行傳回 NULL。

2006 年 4 月 14 日

變更的內容:
  • 更新傳回資料行的描述,以包含 Null 值定義。
  • 更正範例。

2005 年 12 月 5 日

變更的內容:
  • text 欄位的資料類型從 text 改成 nvarchar(max)