sys.dm_exec_sql_text (Transact-SQL)
Restituisce il testo del batch SQL identificato dall'argomento sql_handle specificato. Questa funzione con valori di tabella sostituisce la funzione di sistema fn_get_sql.
Sintassi
sys.dm_exec_sql_text(sql_handle | plan_handle)
Argomenti
sql_handle
Handle SQL del batch da cercare. sql_handle è di tipo varbinary(64). È possibile ottenere sql_handle dagli oggetti a gestione dinamica seguenti: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
Identificatore del piano di query.Per ulteriori informazioni, vedere sys.dm_exec_text_query_plan (Transact-SQL).
Tabella restituita
Nome colonna |
Tipo di dati |
Descrizione |
---|---|---|
dbid |
smallint |
ID del database. Per istruzioni SQL ad hoc e preparate viene restituito NULL. |
objectid |
int |
ID dell'oggetto. Per istruzioni SQL ad hoc e preparate viene restituito NULL. |
number |
smallint |
Per una stored procedure numerata, questa colonna restituisce il numero della stored procedure. Per ulteriori informazioni, vedere sys.numbered_procedures (Transact-SQL). Per istruzioni SQL ad hoc e preparate viene restituito NULL. |
encrypted |
bit |
1 = Il testo SQL è crittografato. 0 = Il testo SQL non è crittografato. |
text |
nvarchar(max) |
Testo della query SQL. Per gli oggetti crittografati viene restituito NULL. |
Autorizzazioni
È richiesta l'autorizzazione VIEW SERVER STATE nel server.
Osservazioni
Per i batch gli handle SQL sono valori basati sul testo SQL. Per alcuni oggetti di database, ad esempio stored procedure, trigger o funzioni, gli handle SQL sono derivati dall'ID di database e dall'ID e dal numero dell'oggetto. handle_piano è un valore hash derivato dal piano compilato dell'intero batch.
Esempi
A. Recupero di informazioni sulle prime cinque query in base al tempo medio di CPU
Nell'esempio seguente vengono restituiti il testo dell'istruzione SQL e il tempo medio di CPU per le prime cinque query.
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. Restituzione di statistiche di esecuzione dei batch
Nell'esempio seguente viene restituito il testo delle query SQL eseguite in batch e vengono visualizzate le relative informazioni statistiche.
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;
Vedere anche