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.

  1. 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';
    
  2. 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 sein 59.

    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
    
  3. 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 sein 59. Ü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)