sys.dm_exec_sql_text (Transact-SQL)

Gibt den Text des SQL-Batches 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
    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

  • 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.

Dieser Wert ist für Ad-hoc-Anweisungen und vorbereitete SQL-Anweisungen NULL.

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 wie gespeicherte Prozeduren, Trigger oder Funktionen sind die SQL-Handles von der Datenbank-ID, Objekt-ID und Objektnummer abgeleitet. Planhandle ist ein Hashwert, der aus dem kompilierten Plan des gesamten Batchs abgeleitet wird.

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;