sys.fn_get_sql (Transact-SQL)

Gilt für:SQL Server

Gibt den Text der SQL-Anweisung für das angegebene SQL-Handle zurück.

Wichtig

Dieses Feature wird in einer künftigen Version von Microsoft SQL Server entfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Verwenden Sie stattdessen sys.dm_exec_sql_text. Weitere Informationen finden Sie unter sys.dm_exec_sql_text (Transact-SQL).

Transact-SQL-Syntaxkonventionen

Syntax

  
sys.fn_get_sql ( SqlHandle )  

Argumente

SqlHandle
Wert des Handles. SqlHandle ist varbinary(64) ohne Standardeinstellung.

Zurückgegebene Tabellen

Spaltenname Datentyp BESCHREIBUNG
dbid smallint Datenbank-ID Für Ad-hoc-Anweisungen und vorbereitete SQL-Anweisungen, die ID der Datenbank, in der die Anweisungen kompiliert wurden.
objectid int ID des Datenbankobjekts. Dieser Wert ist für Ad-hoc-SQL-Anweisungen NULL.
number smallint Gibt die Nummer der Gruppe an, wenn die Prozeduren gruppiert sind.

0 = Einträge sind keine Prozeduren.

NULL = Ad-hoc-SQL-Anweisungen.
encrypted bit Zeigt an, ob das Objekt verschlüsselt ist.

0 = Nicht verschlüsselt

1 = Verschlüsselt.
Text text Der Text der SQL-Anweisung. Der Wert ist für verschlüsselte Objekte NULL.

Bemerkungen

Sie können ein gültiges SQL-Handle aus der spalte sql_handle der dynamischen Verwaltungssicht sys.dm_exec_requests (Transact-SQL) abrufen.

Wenn Sie ein Handle übergeben, das nicht mehr im Cache vorhanden ist, gibt fn_get_sql ein leeres Resultset zurück. Wenn Sie ein ungültiges Handle übergeben, wird die Ausführung des Batches beendet und eine Fehlermeldung zurückgegeben.

Die SQL Server-Datenbank-Engine kann einige Transact-SQL-Anweisungen nicht zwischenspeichern, z. B. Massenkopieranweisungen und Anweisungen mit Zeichenfolgenliteralen, die größer als 8 KB sind. Handles für diese Anweisungen können nicht mithilfe von fn_get_sql abgerufen werden.

Die Textspalte des Resultsets wird nach Text gefiltert, der möglicherweise Kennwörter enthalten kann. Weitere Informationen zu sicherheitsrelevanten gespeicherten Prozeduren, die nicht überwacht werden, finden Sie unter Filtern einer Ablaufverfolgung.

Die fn_get_sql-Funktion gibt Informationen zurück, die dem DBCC INPUTBUFFER-Befehl ähneln. Im Folgenden handelt es sich um Beispiele, in denen die fn_get_sql-Funktion verwendet werden kann, weil DBCC INPUTBUFFER nicht verwendet werden kann:

  • Ereignisse umfassen mehr als 255 Zeichen.

  • Sie möchten die höchste aktuelle Schachtelungsebene einer gespeicherten Prozedur zurückgeben. Beispiel: Es gibt zwei gespeicherte Prozeduren namens sp_1 und sp_2. Wenn sp_1 die Prozedur sp_2 aufruft und Sie das Handle von der dynamischen Verwaltungssicht sys.dm_exec_requests erhalten, während sp_2 ausgeführt wird, gibt die fn_get_sql-Funktion Informationen zu sp_2 zurück. Außerdem gibt die fn_get_sql-Funktion den gesamten Text der gespeicherten Prozedur auf der höchsten aktuellen Schachtelungsebene zurück.

Berechtigungen

Der Benutzer benötigt die VIEW SERVER STATE-Berechtigung auf dem Server.

Beispiele

Datenbankadministratoren können die fn_get_sql-Funktion, wie im folgenden Beispiel gezeigt, für die Diagnose von Problemprozessen verwenden. Nachdem ein Administrator eine Problemsitzungs-ID identifiziert hat, kann der Administrator das SQL-Handle für diese Sitzung abrufen, fn_get_sql mit dem Handle aufrufen und dann die Start- und Endoffsets verwenden, um den SQL-Text der Problemsitzungs-ID zu bestimmen.

DECLARE @Handle varbinary(64);  
SELECT @Handle = sql_handle   
FROM sys.dm_exec_requests   
WHERE session_id = 52 and request_id = 0;  
SELECT * FROM sys.fn_get_sql(@Handle);  
GO  

Weitere Informationen

DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)