Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Retourneert de tekst van de SQL-instructie voor de opgegeven SQL-ingang.
Belangrijk
Deze functie wordt verwijderd in een toekomstige versie van Microsoft SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie. Gebruik in plaats daarvan sys.dm_exec_sql_text. Zie sys.dm_exec_sql_text (Transact-SQL)voor meer informatie.
Transact-SQL syntaxis-conventies
Syntaxis
sys.fn_get_sql ( SqlHandle )
Argumenten
SqlHandle
Is de ingangswaarde.
SqlHandle is varbinary(64) zonder standaardinstelling.
Geretourneerde tabellen
| Kolomnaam | Gegevenstype | Beschrijving |
|---|---|---|
| dbid | smallint | Database-ID. Voor ad-hoc en voorbereide SQL-instructies, de id van de database waarin de instructies zijn gecompileerd. |
| object-id | Int | Id van het databaseobject. Is NULL voor ad-hoc SQL-instructies. |
| nummer | smallint | Geeft het aantal van de groep aan, als de procedures zijn gegroepeerd. 0 = Vermeldingen zijn geen procedures. NULL = Ad hoc SQL-instructies. |
| Gecodeerde | bit | Geeft aan of het object is versleuteld. 0 = Niet versleuteld 1 = Versleuteld |
| Tekst | tekst | Is de tekst van de SQL-instructie. Is NULL voor versleutelde objecten. |
Opmerkingen
U kunt een geldige SQL-ingang verkrijgen uit de sql_handle kolom van de dynamische beheerweergave van de sys.dm_exec_requests (Transact-SQL).
Als u een ingang doorgeeft die niet meer in de cache voorkomt, retourneert fn_get_sql een lege resultatenset. Als u een ingang doorgeeft die niet geldig is, stopt de batch en wordt er een foutbericht geretourneerd.
De SQL Server Database Engine kan sommige Transact-SQL-instructies niet in de cache opslaan, zoals instructies voor bulksgewijs kopiëren en instructies met letterlijke tekenreeksen die groter zijn dan 8 kB. Handles naar deze instructies kunnen niet worden opgehaald met behulp van fn_get_sql.
De tekstkolom van de resultatenset wordt gefilterd op tekst die mogelijk wachtwoorden bevat. Zie Een trace filteren voor meer informatie over opgeslagen beveiligingsprocedures die niet worden bewaakt.
De fn_get_sql functie retourneert informatie die vergelijkbaar is met de DBCC INPUTBUFFER-opdracht . Hier volgen enkele voorbeelden van wanneer de functie fn_get_sql kan worden gebruikt, omdat DBCC INPUTBUFFER niet kan zijn:
Wanneer gebeurtenissen meer dan 255 tekens bevatten.
Wanneer u het hoogste huidige nestniveau van een opgeslagen procedure moet retourneren. Er zijn bijvoorbeeld twee opgeslagen procedures met de naam sp_1 en sp_2. Als sp_1 sp_2 aanroept en u de ingang verkrijgt uit de sys.dm_exec_requests dynamische beheerweergave terwijl sp_2 wordt uitgevoerd, retourneert de fn_get_sql functie informatie over sp_2. Daarnaast retourneert de functie fn_get_sql de volledige tekst van de opgeslagen procedure op het hoogste huidige nestniveau.
Machtigingen
De gebruiker heeft de machtiging SERVERSTATUS WEERGEVEN op de server nodig.
Voorbeelden
Databasebeheerders kunnen de fn_get_sql-functie gebruiken, zoals wordt weergegeven in het volgende voorbeeld, om problemen te diagnosticeren. Nadat een beheerder een probleemsessie-id heeft geïdentificeerd, kan de beheerder de SQL-ingang voor die sessie ophalen, fn_get_sql aanroepen met de ingang en vervolgens de begin- en eind offsets gebruiken om de SQL-tekst van de probleemsessie-id te bepalen.
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
Zie ook
DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)