sys.dm_exec_sql_text (Transact-SQL)
傳回指定的 sql_handle 所指 SQL 批次的文字。 這個資料表值函式取代系統函數 fn_get_sql。
語法
sys.dm_exec_sql_text(sql_handle | plan_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
sys.dm_exec_connections
plan_handle
這是查詢計畫的識別碼。如需詳細資訊,請參閱<sys.dm_exec_text_query_plan (Transact-SQL)>。
傳回的資料表
資料行名稱 |
資料類型 |
說明 |
---|---|---|
dbid |
smallint |
資料庫的識別碼。 對於隨選和準備的 SQL 陳述式而言,則為編譯陳述式的資料庫識別碼。 |
objectid |
int |
物件的識別碼。 特定和準備 SQL 陳述式的這個值是 NULL。 |
number |
smallint |
對於已編號的預存程序,這個資料行會傳回預存程序的編號。 如需詳細資訊,請參閱<sys.numbered_procedures (Transact-SQL)>。 特定和準備 SQL 陳述式的這個值是 NULL。 |
encrypted |
bit |
1 = SQL 文字已加密。 0 = SQL 文字未加密。 |
text |
nvarchar(max) |
SQL 查詢的文字。 加密物件的這個值是 NULL。 |
權限
需要伺服器的 VIEW SERVER STATE 權限。
備註
針對批次,SQL 控制代碼是依據 SQL 文字的雜湊值。 針對預存程序、觸發程序或函數之類的資料庫物件,SQL 控制代碼是從資料庫識別碼、物件識別碼和物件編碼衍生而來。 plan_handle 是從整個批次的已編譯計畫衍生的雜湊值。
範例
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 (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_cursors (Transact-SQL)