Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Возвращает число обработчиков, выполненных при срабатывании триггера инструкции. Функция TRIGGER_NESTLEVEL используется в триггерах DML и DDL для определения текущего уровня вложенности.
Соглашения о синтаксисе Transact-SQL
Синтаксис
TRIGGER_NESTLEVEL ( [ object_id ] , [ 'trigger_type' ] , [ 'trigger_event_category' ] )
Аргументы
object_id
Идентификатор объекта триггера. Если указан аргумент object_id, возвращается количество запусков этого триггера для данной инструкции. Если аргумент object_id не указан, возвращается число срабатываний всех триггеров для данной инструкции.
'trigger_type'
Указывает, к каким триггерам применяется функция TRIGGER_NESTLEVEL — AFTER или INSTEAD OF. Для триггеров AFTER следует указать AFTER. Для триггеров INSTEAD OF укажите IOT. Если указан аргумент trigger_type, необходимо также указать trigger_event_category.
'trigger_event_category'
Указывает, к каким триггерам применять функцию TRIGGER_NESTLEVEL — DML или DDL. Для триггеров DML следует указать DML, для триггеров DDL — DDL. Если указан аргумент trigger_event_category, необходимо также указать trigger_type. При использовании значения DDL значение предыдущего аргумента может быть только AFTER, так как триггеры DDL всегда являются триггерами AFTER.
Замечания
Если не задано никаких аргументов, функция TRIGGER_NESTLEVEL возвращает общее число триггеров в стеке вызова. Этот список также включает и саму функцию TRIGGER_NESTLEVEL. Пропуск аргументов может наблюдаться в случае, когда триггер выполняет команды, приводящие к запуску другого триггера, или создает последовательность запускаемых триггеров.
Для возвращения общего числа триггеров в стеке вызовов для конкретного типа триггеров и категории событий следует указать аргумент object_id = 0.
Функция TRIGGER_NESTLEVEL возвращает 0 в случае выполнения вне триггера, если значение хотя бы одного из аргументов не равно NULL.
Если каким-либо аргументам явно задано значение NULL, то оно возвращается независимо от того, внутри или вне триггера использовалась функция TRIGGER_NESTLEVEL.
Примеры
А. Проверка уровня вложенности конкретного триггера DML
IF ( (SELECT TRIGGER_NESTLEVEL( OBJECT_ID('xyz') , 'AFTER' , 'DML' ) ) > 5 )
RAISERROR('Trigger xyz nested more than 5 levels.',16,-1)
B. Проверка уровня вложенности конкретного триггера DDL
IF ( ( SELECT TRIGGER_NESTLEVEL ( ( SELECT object_id FROM sys.triggers
WHERE name = 'abc' ), 'AFTER' , 'DDL' ) ) > 5 )
RAISERROR ('Trigger abc nested more than 5 levels.',16,-1)
В. Проверка уровня вложенности всех сработавших триггеров
IF ( (SELECT trigger_nestlevel() ) > 5 )
RAISERROR
('This statement nested over 5 levels of triggers.',16,-1)