Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Returnerar texten i SQL-instruktionen för den angivna SQL-referensen.
Viktigt!
Den här funktionen tas bort i en framtida version av Microsoft SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen. Använd sys.dm_exec_sql_text i stället. Mer information finns i sys.dm_exec_sql_text (Transact-SQL).
Transact-SQL syntaxkonventioner
Syntax
sys.fn_get_sql ( SqlHandle )
Argumentpunkter
SqlHandle
Är referensvärdet.
SqlHandle är varbinary(64) utan standard.
Returnerade tabeller
Kolumnnamn | Datatyp | Beskrivning |
---|---|---|
dbid | smallint | Databas-ID. För ad hoc- och förberedda SQL-instruktioner kompilerades ID:t för databasen där -uttrycken kompilerades. |
objekt-id | Int | ID för databasobjektet. Är NULL för ad hoc SQL-instruktioner. |
nummer | smallint | Anger antalet i gruppen, om procedurerna är grupperade. 0 = Poster är inte procedurer. NULL = Ad hoc SQL-instruktioner. |
krypterade | bit | Anger om objektet är krypterat. 0 = Inte krypterad 1 = Krypterad |
texten | SMS | Är texten i SQL-instruktionen. Är NULL för krypterade objekt. |
Anmärkningar
Du kan hämta ett giltigt SQL-handtag från kolumnen sql_handle i vyn sys.dm_exec_requests (Transact-SQL) dynamisk hantering.
Om du skickar ett handtag som inte längre finns i cacheminnet returnerar fn_get_sql en tom resultatuppsättning. Om du skickar ett handtag som inte är giltigt stoppas batchen och ett felmeddelande returneras.
SQL Server Database Engine kan inte cachelagrar vissa Transact-SQL-instruktioner, till exempel masskopieringsuttryck och -instruktioner med strängliteraler som är större än 8 kB. Handtag till dessa instruktioner kan inte hämtas med hjälp av fn_get_sql.
Textkolumnen i resultatuppsättningen filtreras efter text som kan innehålla lösenord. Mer information om säkerhetsrelaterade lagrade procedurer som inte övervakas finns i Filtrera en spårning.
Funktionen fn_get_sql returnerar information som liknar DBCC INPUTBUFFER-kommandot . Följande är exempel på när funktionen fn_get_sql kan användas eftersom DBCC INPUTBUFFER inte kan vara:
När händelser har fler än 255 tecken.
När du måste returnera den högsta aktuella kapslingsnivån för en lagrad procedur. Det finns till exempel två lagrade procedurer med namnet sp_1 och sp_2. Om sp_1 anropar sp_2 och du hämtar handtaget från vyn sys.dm_exec_requests dynamisk hantering medan sp_2 körs returnerar funktionen fn_get_sql information om sp_2. Dessutom returnerar funktionen fn_get_sql den fullständiga texten i den lagrade proceduren på den högsta aktuella kapslingsnivån.
Behörigheter
Användaren behöver behörigheten VISA SERVERTILLSTÅND på servern.
Exempel
Databasadministratörer kan använda funktionen fn_get_sql, som du ser i följande exempel, för att diagnostisera problemprocesser. När en administratör har identifierat ett problemsessions-ID kan administratören hämta SQL-handtaget för den sessionen, anropa fn_get_sql med handtaget och sedan använda start- och slutförskjutningarna för att fastställa SQL-texten för problemsessions-ID:t.
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
Se även
DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)