fn_get_sql (Transact-SQL)
Gibt den Text der SQL-Anweisung für das angegebene SQL-Handle zurück.
Wichtig |
---|
Dieses Feature wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Vermeiden Sie die Verwendung dieses Features bei neuen Entwicklungsarbeiten, und planen Sie die Änderung von Anwendungen, die dieses Feature zurzeit verwenden. Verwenden Sie stattdessen sys.dm_exec_sql_text. Weitere Informationen finden Sie unter sys.dm_exec_sql_text (Transact-SQL). |
Syntax
sys.fn_get_sql ( SqlHandle )
Argumente
- SqlHandle
Ist der Handlewert. SqlHandle ist vom Datentyp varbinary(64) und verfügt über keinen Standardwert.
Zurückgegebene Tabellen
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
dbid |
smallint |
Datenbank-ID. Dieser Wert ist für Ad-hoc-SQL-Anweisungen NULL. |
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) abrufen.
Wenn Sie ein Handle übergeben, das nicht mehr im Cache gespeichert ist, gibt fn_get_sqfn_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 nicht zwischenspeichern, wie 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 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_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 problematische Sitzungs-ID festgestellt hat, kann der Administrator das SQL-Handle für diese Sitzung 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