sys.fn_get_sql (Transact-SQL)
Gibt den Text der SQL-Anweisung für das angegebene SQL-Handle zurück.
Wichtig |
---|
Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird. 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 vom Datentyp varbinary(64) und hat keinen Standardwert.
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. |
Hinweise
Sie können ein gültiges SQL-Handle aus der sql_handle-Spalte der dynamischen Verwaltungssicht sys.dm_exec_requests (Transact-SQL) erhalten.
Wenn Sie ein Handle übergeben, das nicht mehr im Cache gespeichert 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.
SQL Server Database Engine (Datenbankmodul) kann einige Transact-SQL-Anweisungen wie Massenkopieranweisungen und Anweisungen mit Zeichenfolgenliteralen nicht zwischenspeichern, die größer als 8 KB sind. Handles für diese Anweisungen können nicht mithilfe von fn_get_sql abgerufen werden.
Die text-Spalte des Resultsets wird nach Text gefiltert, der möglicherweise Kennwörter enthält. Weitere Informationen zu gespeicherten Prozeduren im Sicherheitskontext, die nicht überwacht werden, finden Sie unter Filtern einer Ablaufverfolgung.
Die fn_get_sql-Funktion gibt Informationen zurück, die dem DBCC INPUTBUFFER-Befehl gleichen. 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_2 von sp_1 aufgerufen wird, und Sie den Handle aus der dynamischen Verwaltungssicht sys.dm_exec_requests erhalten, während sp_2 ausgeführt wird, werden von der fn_get_sql-Funktion Informationen über sp_2 zurückgegeben. 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 problematische Sitzungs-ID erkannt hat, kann der Administrator das SQL-Handle für diese Sitzungs abrufen, die fn_get_sql-Funktion mit dem Handle aufrufen und mithilfe der Start- und Endoffsets den SQL-Text der problematischen Sitzungs-ID ermitteln.
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
Siehe auch
Verweis
DBCC INPUTBUFFER (Transact-SQL)