Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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).
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)