Sdílet prostřednictvím


sys.fn_get_sql (Transact-SQL)

platí pro:SQL Server

Vrátí text příkazu SQL pro zadaný popisovač SQL.

Důležité

Tato funkce bude odebrána v budoucí verzi Microsoft SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají. Místo toho použijte sys.dm_exec_sql_text. Další informace najdete v tématu sys.dm_exec_sql_text (Transact-SQL).

Transact-SQL konvence syntaxe

Syntaxe

  
sys.fn_get_sql ( SqlHandle )  

Argumenty

SqlHandle
Je hodnota popisovače. SqlHandle je varbinary(64) bez výchozího nastavení.

Vrácené tabulky

Název sloupce Datový typ Popis
dbid smallint ID databáze. Pro ad hoc a připravené příkazy SQL ID databáze, ve které byly příkazy zkompilovány.
Objektový identifikátor Int ID databázového objektu. Je NULL pro ad hoc příkazy SQL.
číslo smallint Určuje počet skupin, pokud jsou postupy seskupeny.

0 = Položky nejsou postupy.

NULL = ad hoc příkazy SQL.
zakódovaný bit Určuje, zda je objekt zašifrován.

0 = Nezašifrováno

1 = zašifrováno
Text Text Je text příkazu SQL. Má hodnotu NULL pro šifrované objekty.

Poznámky

Platný popisovač SQL můžete získat ze sloupce sql_handle dynamické správy sys.dm_exec_requests (Transact-SQL).

Pokud předáte popisovač, který již v mezipaměti neexistuje, fn_get_sql vrátí prázdnou sadu výsledků. Pokud předáte popisovač, který není platný, dávka se zastaví a vrátí se chybová zpráva.

Databázový stroj SQL Serveru nemůže ukládat některé příkazy Transact-SQL do mezipaměti, například příkazy hromadného kopírování a příkazy s řetězcovými literály, které jsou větší než 8 kB. Popisovače těchto příkazů nelze načíst pomocí fn_get_sql.

Textový sloupec sady výsledků je filtrován pro text, který může obsahovat hesla. Další informace o uložených procedurách souvisejících se zabezpečením, které nejsou monitorovány, naleznete v tématu Filtrování trasování.

Funkce fn_get_sql vrátí informace podobné příkazu DBCC INPUTBUFFER . Tady jsou příklady, kdy lze použít funkci fn_get_sql, protože DBCC INPUTBUFFER nemůže být:

  • Pokud události mají více než 255 znaků.

  • Pokud potřebujete vrátit nejvyšší aktuální úroveň vnoření uložené procedury. Existují například dvě uložené procedury s názvem sp_1 a sp_2. Pokud sp_1 volá sp_2 a získáte popisovač ze zobrazení dynamické správy sys.dm_exec_requests během sp_2, vrátí funkce fn_get_sql informace o sp_2. Kromě toho funkce fn_get_sql vrátí úplný text uložené procedury na nejvyšší aktuální úrovni vnoření.

Povolení

Uživatel potřebuje na serveru oprávnění ZOBRAZIT STAV SERVERU.

Příklady

Správci databáze můžou použít funkci fn_get_sql, jak je znázorněno v následujícím příkladu, k diagnostice problémů. Jakmile správce identifikuje ID relace problému, může správce načíst popisovač SQL pro danou relaci, zavolat fn_get_sql s popisovačem a potom pomocí počátečního a koncového posunu určit text SQL ID relace problému.

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  

Viz také

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