Dela via


sys.fn_get_sql (Transact-SQL)

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)