Teilen über


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

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.
Zahl smallint Gibt die Nummer der Gruppe an, wenn die Prozeduren gruppiert sind.

0 = Einträge sind keine Prozeduren.

NULL = Ad-hoc-SQL-Anweisungen.
verschlüsselt 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.

Hinweise

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

Wenn Sie ein Handle übergeben, das nicht mehr im Cache vorhanden ist, gibt fn_get_sql einen leeren 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 können einige Transact-SQL-Anweisungen nicht zwischenspeichern, z. B. Massenkopien 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 Kennwörter enthalten kann. Weitere Informationen zu sicherheitsbezogenen gespeicherten Prozeduren, die nicht überwacht werden, finden Sie unter Filtern einer Ablaufverfolgung.

Die fn_get_sql-Funktion gibt Informationen zurück, die dem BEFEHL DBCC INPUTBUFFER ä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. Beispielsweise gibt es zwei gespeicherte Prozeduren, die sp_1 und sp_2 benannt sind. Wenn sp_1 sp_2 aufruft und Sie das Handle aus der sys.dm_exec_requests dynamischen Verwaltungsansicht abrufen, 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 den Start- und Endoffset 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)