sys.dm_exec_sql_text (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Gibt den Text des SQL-Batches zurück, der durch die angegebene sql_handle identifiziert wird. Diese Tabellenwertfunktion ersetzt die Systemfunktion fn_get_sql.
Syntax
sys.dm_exec_sql_text(sql_handle | plan_handle)
Argumente
sql_handle
Ist ein Token, das einen Batch eindeutig identifiziert, der ausgeführt wurde oder zurzeit ausgeführt wird. sql_handle ist varbinary(64).
Die sql_handle können aus den folgenden dynamischen Verwaltungsobjekten abgerufen werden:
plan_handle
Ein Token, das einen Abfrageausführungsplan für einen Batch eindeutig identifiziert, der ausgeführt wurde und dessen Plan sich im Plancache befindet, oder der derzeit ausgeführt wird. plan_handle ist varbinary(64)
plan_handle kann aus den folgenden dynamischen Verwaltungsobjekten abgerufen werden:
Zurückgegebene Tabelle
Spaltenname | Datentyp | Beschreibung |
---|---|---|
dbid | smallint | ID der Datenbank. Für statische SQL in einer gespeicherten Prozedur die ID der Datenbank, die die gespeicherte Prozedur enthält. Andernfalls NULL. |
objectid | int | ID des Objekts. Dieser Wert ist für Ad-hoc-Anweisungen und vorbereitete SQL-Anweisungen NULL. |
Zahl | smallint | Für eine nummerierte gespeicherte Prozedur gibt diese Spalte die Nummer der gespeicherten Prozedur zurück. Weitere Informationen finden Sie unter sys.numbered_procedures (Transact-SQL). Dieser Wert ist für Ad-hoc-Anweisungen und vorbereitete SQL-Anweisungen NULL. |
encrypted | bit | 1 = Der SQL-Text ist verschlüsselt. 0 = Der SQL-Text ist nicht verschlüsselt. |
text | nvarchar(max) | Text der SQL-Abfrage. Der Wert ist für verschlüsselte Objekte NULL. |
Berechtigungen
Erfordert die VIEW SERVER STATE
-Berechtigung auf dem Server.
Berechtigungen für SQL Server 2022 und höher
Erfordert die VIEW SERVER PERFORMANCE STATE-Berechtigung auf dem Server.
Hinweise
Bei Ad-hoc-Abfragen sind die SQL-Handles Hashwerte, die auf dem SQL-Text basieren, der an den Server übermittelt wird, und können aus einer beliebigen Datenbank stammen.
Für Datenbankobjekte, z. B. gespeicherte Prozeduren, Trigger oder Funktionen, werden die SQL-Handles von der Datenbank-ID, Objekt-ID und Objektnummer abgeleitet.
Das Planhandle ist ein Vom kompilierten Plan des gesamten Batches abgeleiteter Hashwert.
Hinweis
dbid kann nicht von sql_handle für Ad-hoc-Abfragen bestimmt werden. Verwenden Sie stattdessen plan_handle, um dbid für Ad-hoc-Abfragen zu bestimmen.
Beispiele
A. Konzeptionelles Beispiel
Im Folgenden finden Sie ein einfaches Beispiel zum Veranschaulichen einer sql_handle entweder direkt oder mit CROSS APPLY.
Aktivität erstellen.
Führen Sie das folgende T-SQL in einem neuen Abfragefenster in SQL Server Management Studio aus.-- Identify current spid (session_id) SELECT @@SPID; GO -- Create activity WAITFOR DELAY '00:02:00';
VERWENDEN VON CROSS APPLY.
Die sql_handle von sys.dm_exec_requests wird mit CROSS APPLY an sys.dm_exec_sql_text übergeben. Öffnen Sie ein neues Abfragefenster, und übergeben Sie den in Schritt 1 identifizierten Spid. In diesem Beispiel ist der Spid zu sein59
.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
Sql_handle direkt übergeben.
Rufen Sie die sql_handle von sys.dm_exec_requests ab. Übergeben Sie dann die sql_handle direkt an sys.dm_exec_sql_text. Öffnen Sie ein neues Abfragefenster, und übergeben Sie den in Schritt 1 identifizierten spid an sys.dm_exec_requests. In diesem Beispiel ist der Spid zu sein59
. Übergeben Sie dann die zurückgegebene sql_handle als Argument an 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. Abrufen von Informationen zu den fünf wichtigsten Abfragen nach durchschnittlicher CPU-Zeit
Im folgenden Beispiel wird der Text der SQL-Anweisung und die durchschnittliche CPU-Zeit für die fünf Abfragen mit der höchsten durchschnittlichen CPU-Zeit zurückgegeben.
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. Bereitstellen von Batchausführungsstatistiken
Im folgenden Beispiel wird der Text von SQL-Abfragen zurückgegeben, die in Batches ausgeführt werden. Außerdem werden statistische Informationen zu den Abfragen bereitgestellt.
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;
Siehe auch
Dynamische Verwaltungssichten und Funktionen (Transact-SQL)
Dynamische Verwaltungssichten und -funktionen im Zusammenhang mit der Ausführung (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)
Verwenden von APPLY
sys.dm_exec_text_query_plan (Transact-SQL)