Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:SQL Server
Возвращает текст инструкции SQL для указанного дескриптора SQL.
Внимание
В будущей версии Microsoft SQL Server этот компонент будет удален. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Вместо нее используйте sys.dm_exec_sql_text. Дополнительные сведения см. в sys.dm_exec_sql_text (Transact-SQL).
Соглашения о синтаксисе Transact-SQL
Синтаксис
sys.fn_get_sql ( SqlHandle )
Аргументы
SqlHandle
Значение дескриптора.
SqlHandle — varbinary (64) без значения по умолчанию.
Возвращаемые таблицы
| Имя столбца | Тип данных | Описание |
|---|---|---|
| dbid | смолинт | Идентификатор базы данных. Для нерегламентированных и подготовленных инструкций SQL это идентификатор базы данных, в которой происходила компиляция инструкции. |
| objectid | int | Идентификатор объекта базы данных. Имеет значение NULL для нерегламентированных инструкций SQL. |
| число/номер | смолинт | Указывает на номер группы, если процедуры сгруппированы. 0 = записи не являются процедурами. NULL = нерегламентированные инструкции SQL. |
| зашифрованными; | бит | Указывает, зашифрован ли объект. 0 = не зашифрована 1 = зашифрована |
| текст | текст | Текст инструкции SQL. Имеет значение NULL для зашифрованных объектов. |
Замечания
Допустимый дескриптор SQL можно получить из столбца sql_handle динамического управления sys.dm_exec_requests (Transact-SQL ).
Если передать дескриптор, который больше не существует в кэше, fn_get_sql возвращает пустой результирующий набор. Если передается недопустимый дескриптор, выполнение пакета прекращается и возвращается сообщение об ошибке.
Sql Server ядро СУБД не может кэшировать некоторые инструкции Transact-SQL, такие как инструкции массового копирования и инструкции со строковыми литералами, размер которых превышает 8 КБ. Дескрипторы этих инструкций не могут быть извлечены при помощи функции fn_get_sql.
Текстовый столбец результирующий набор фильтруется по тексту, который может содержать пароли. Дополнительные сведения о связанных с безопасностью хранимых процедурах, которые не отслеживаются, см. в разделе "Фильтрация трассировки".
Функция fn_get_sql возвращает сведения, аналогичные команде DBCC INPUTBUFFER . Ниже приведены случаи, когда функцию fn_get_sql использовать можно, а команду DBCC INPUTBUFFER — нельзя:
если событие содержит более чем 255 символов;
если необходимо получить наивысший из текущих уровней вложенности хранимой процедуры. Например, есть две хранимые процедуры с именами sp_1 и sp_2. Если процедура sp_1 вызывает процедуру sp_2 и вы получаете дескриптор из динамического административного представления sys.dm_exec_requests во время выполнения процедуры sp_2, функция fn_get_sql возвращает сведения о процедуре sp_2. Кроме того, функция fn_get_sql возвращает полный текст хранимой процедуры на высшем текущем уровне вложенности.
Разрешения
Пользователю необходимо разрешение VIEW SERVER STATE на сервере.
Примеры
Администраторы базы данных могут использовать функцию fn_get_sql, как показано в следующем примере, для облегчения диагностики проблемных процессов. После того как администратор находит проблемный идентификатор сеанса, он может получить дескриптор SQL для идентификатора сеанса, вызвать функцию n_get_sql, используя дескриптор, и после этого определить текст SQL проблемного идентификатора сеанса.
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
См. также
DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)