Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
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)