sys.dm_exec_sql_text
Gibt den Text des SQL-Batches zurück, der von dem angegebenen sql_handle identifiziert wird. Diese Tabellenwertfunktion ersetzt die Systemfunktion fn_get_sql.
sys.dm_exec_sql_text(sql_handle | plan_handle)
- sql_handle
-
Dies ist das SQL-Handle für den zu suchenden Batch. sql_handle ist varbinary(64). sql_handle kann von den folgenden dynamischen Verwaltungsobjekten abgerufen werden:
- 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
- sys.dm_exec_query_stats
- plan_handle
- Ist ein Bezeichner für den Abfrageplan. Weitere Informationen finden Sie unter sys.dm_exec_text_query_plan.
| Spaltenname | Datentyp | Beschreibung |
|---|---|---|
|
dbid |
smallint |
ID der Datenbank. Für Ad-hoc-Anweisungen und vorbereitete SQL-Anweisungen, die ID der Datenbank, in der die Anweisungen kompiliert wurden. |
|
objectid |
int |
ID des Objekts. Dieser Wert ist für Ad-hoc-Anweisungen und vorbereitete SQL-Anweisungen NULL. |
|
number |
smallint |
Für eine nummerierte gespeicherte Prozedur gibt diese Spalte die Nummer der gespeicherten Prozedur zurück. Weitere Informationen finden Sie unter sys.dm_exec_query_memory_grants. 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. |
Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.
Für Batches sind die SQL-Handle Hashwerte auf der Grundlage des SQL-Texts. Für Datenbankobjekte wie gespeicherte Prozeduren, Trigger oder Funktionen werden die SQL-Handles von der Datenbank-ID, Objekt-ID und Objektnummer abgeleitet. plan_handle ist ein Hashwert, der vom kompilierten Plan des gesamten Batches abgeleitet wird.
A. Abrufen von Informationen zu den fünf Abfragen mit dem höchsten durchschnittlichen CPU-Zeitaufwand
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;
B. Bereitstellen einer Statistik zur Batchausführung
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;