Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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)