sys.dm_exec_sql_text (Transact-SQL)
Gibt den Text des SQL-Batchs zurück, der von dem angegebenen 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
Das SQL-Handle für den zu suchenden Batch. sql_handle ist vom Datentyp 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
plan_handle
Ist ein Bezeichner für den Abfrageplan.Weitere Informationen finden Sie unter sys.dm_exec_text_query_plan (Transact-SQL).
Zurückgegebene Tabelle
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.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.
Hinweise
Für Batches sind die SQL-Handle Hashwerte auf der Grundlage des SQL-Texts. Für Datenbankobjekte, z. B. gespeicherte Prozeduren, Trigger oder Funktionen, werden die SQL-Handles von der Datenbank-ID, Objekt-ID und Objektnummer abgeleitet. plan_handle ist ein vom kompilierten Plan des gesamten Batches abgeleiteter Hashwert.
Beispiele
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;
Siehe auch
Verweis
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)