fn_get_sql (Transact-SQL)

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

Wichtiger HinweisWichtig

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

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

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