Freigeben über


sys.fn_get_sql (Transact-SQL)

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

Wichtiger HinweisWichtig

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

Themenlink (Symbol) 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)

sys.sysprocesses (Transact-SQL)

sys.dm_exec_requests (Transact-SQL)