sys.dm_exec_sql_text (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
Restituisce il testo del batch SQL identificato dal 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
Token che identifica in modo univoco un batch che ha eseguito o è attualmente in esecuzione. sql_handle è varbinary(64).
Il sql_handle può essere ottenuto dagli oggetti a gestione dinamica seguenti:
plan_handle
Token che identifica in modo univoco un piano di esecuzione di query per un batch eseguito e il relativo piano risiede nella cache dei piani o è attualmente in esecuzione. plan_handle is varbinary(64).
È possibile ottenere il plan_handle dagli oggetti a gestione dinamica seguenti:
Tabella restituita
Nome colonna | Tipo di dati | Descrizione |
---|---|---|
dbid | smallint | ID del database. Per SQL statico in una stored procedure, l'ID del database contenente la stored procedure. In caso contrario, il valore è 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 altre informazioni, vedere sys.numbered_procedures (Transact-SQL). Per istruzioni SQL ad hoc e preparate viene restituito NULL. |
crittografato | bit | 1 = Il testo SQL è crittografato. 0 = Il testo SQL non è crittografato. |
Testo | nvarchar(max ) | Testo della query SQL. Per gli oggetti crittografati viene restituito NULL. |
Autorizzazioni
È richiesta l'autorizzazione VIEW SERVER STATE
per il server.
Autorizzazioni per SQL Server 2022 e versioni successive
È richiesta l'autorizzazione VIEW SERVER PERFORMANCE STATE per il server.
Osservazioni:
Per le query ad hoc, gli handle SQL sono valori hash basati sul testo SQL inviato al server e possono provenire da qualsiasi database.
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.
L'handle di piano è un valore hash derivato dal piano compilato dell'intero batch.
Nota
Non è possibile determinare dbid da sql_handle per le query ad hoc. Per determinare il dbid per le query ad hoc, usare invece plan_handle .
Esempi
R. Esempio concettuale
Di seguito è riportato un esempio di base per illustrare il passaggio di un sql_handle direttamente o con CROSS APPLY.
Creare un'attività.
Eseguire il T-SQL seguente in una nuova finestra di query in SQL Server Management Studio.-- Identify current spid (session_id) SELECT @@SPID; GO -- Create activity WAITFOR DELAY '00:02:00';
Utilizzo di CROSS APPLY.
Il sql_handle da sys.dm_exec_requests verrà passato a sys.dm_exec_sql_text utilizzando CROSS APPLY. Aprire una nuova finestra di query e passare lo spid identificato nel passaggio 1. In questo esempio lo spid è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
Passaggio diretto di sql_handle .
Acquisire il sql_handle da sys.dm_exec_requests. Passare quindi il sql_handle direttamente a sys.dm_exec_sql_text. Aprire una nuova finestra di query e passare lo spid identificato nel passaggio 1 a sys.dm_exec_requests. In questo esempio lo spid è59
. Passare quindi il sql_handle restituito come argomento a 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. Ottenere informazioni sulle prime cinque query in base al tempo medio della 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;
C. Fornire statistiche di esecuzione 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;
Vedi anche
Funzioni a gestione dinamica e DMV (Transact-SQL)
Funzioni e viste a gestione dinamica relative all'esecuzione (Transact-SQL)
sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_cursors (Transact-SQL)
sys.dm_exec_xml_handles (Transact-SQL)
sys.dm_exec_query_memory_grants (Transact-SQL)
Utilizzo di APPLY
sys.dm_exec_text_query_plan (Transact-SQL)