Megosztás a következőn keresztül:


sys.fn_get_sql (Transact-SQL)

A következőkre vonatkozik:SQL Server

A megadott SQL-leíró SQL-utasításának szövegét adja vissza.

Fontos

Ez a funkció a Microsoft SQL Server egy későbbi verziójában lesz eltávolítva. Ne használja ezt a funkciót az új fejlesztési munkában, és tervezze meg a funkciót jelenleg használó alkalmazások módosítását. Használja inkább a sys.dm_exec_sql_text. További információ: sys.dm_exec_sql_text (Transact-SQL).

Transact-SQL szintaxis konvenciók

Szemantika

  
sys.fn_get_sql ( SqlHandle )  

Érvek

SqlHandle
A leíró értéke. Az SqlHandlenem alapértelmezett varbinary(64).

Visszaadott táblák

Oszlop név Adattípus Leírás
dbid kisméretű Adatbázis-azonosító. Alkalmi és előkészített SQL-utasítások esetén annak az adatbázisnak az azonosítója, amelyben az utasítások fordítása megtörtént.
objektumazonosító Int Az adatbázis-objektum azonosítója. Null érték az alkalmi SQL-utasításokhoz.
szám kisméretű A csoport számát jelzi, ha az eljárások csoportosítva vannak.

0 = A bejegyzések nem eljárások.

NULL = Alkalmi SQL-utasítások.
Titkosított bit Azt jelzi, hogy az objektum titkosítva van-e.

0 = Nincs titkosítva

1 = Titkosított
szöveg szöveg Az SQL-utasítás szövege. Null értékű titkosított objektumok esetén.

Megjegyzések

Érvényes SQL-leírót a sys.dm_exec_requests (Transact-SQL) dinamikus felügyeleti nézet sql_handle oszlopából szerezhet be.

Ha olyan leírót ad át, amely már nem létezik a gyorsítótárban, fn_get_sql üres eredményhalmazt ad vissza. Ha érvénytelen leírót ad át, a köteg leáll, és hibaüzenet jelenik meg.

Az SQL Server adatbázismotorja nem képes gyorsítótárba tárni néhány Transact-SQL utasítást, például a tömeges másolási utasításokat és a 8 KB-nál nagyobb sztringkonstansokat tartalmazó utasításokat. Az utasításokhoz tartozó leírók nem kérhetők le fn_get_sql használatával.

Az eredményhalmaz szövegoszlopa a jelszavakat tartalmazó szövegekre lesz szűrve. A nem figyelt, biztonsággal kapcsolatos tárolt eljárásokkal kapcsolatos további információkért tekintse meg a Nyomkövetés szűrése című témakört.

A fn_get_sql függvény a DBCC INPUTBUFFER parancshoz hasonló adatokat ad vissza. Az alábbiakban példákat talál arra, hogy mikor használható a fn_get_sql függvény, mert a DBCC INPUTBUFFER nem lehet:

  • Ha az események 255 karakternél több karakterből állnak.

  • Ha egy tárolt eljárás legmagasabb aktuális beágyazási szintjét kell visszaadnia. Például két tárolt eljárás van, amelyek neve sp_1 és sp_2. Ha sp_1 meghívja sp_2, és a leírót a sys.dm_exec_requests dinamikus felügyeleti nézetből szerzi be, miközben sp_2 fut, a fn_get_sql függvény a sp_2 adatait adja vissza. Emellett a fn_get_sql függvény a tárolt eljárás teljes szövegét adja vissza a legmagasabb aktuális beágyazási szinten.

Engedélyek

A felhasználónak a KISZOLGÁLÓ ÁLLAPOTának megtekintése engedélyre van szüksége a kiszolgálón.

Példák

Az adatbázis-rendszergazdák az alábbi példában látható módon használhatják a fn_get_sql függvényt a problémafolyamatok diagnosztizálásához. Miután a rendszergazda azonosította a probléma munkamenet-azonosítóját, a rendszergazda lekérheti az adott munkamenet SQL-leíróját, meghívhatja fn_get_sql a leíróval, majd a probléma munkamenet-azonosítójának SQL-szövegének meghatározásához használja a kezdő és a záró eltolást.

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  

Lásd még:

DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)