2012-04-16 2 views
10

Будет ли инструкция Insert в таблице с триггером «INSTEAD OF» вызвать бесконечный «вместо», вставить «цикл исполнений»?ВМЕСТО ТРИГГЕРА, будет ли это бесконечно петля?

Например это:

CREATE TRIGGER setDescToUpper ON part_numbers 
INSTEAD OF INSERT 

AS 
BEGIN 
    INSERT INTO part_numbers (
     colA, 
     colB, 
     part_description 
    ) SELECT 
     colA, 
     colB, 
     UPPER(part_description) 
    ) FROM 
     INSERTED 
END 
GO 

ли оператор вставки внутри «вместо» триггера вызвать петлю?

Я не хочу отключать рекурсивные триггеры.

Нужно ли временно отключить триггер?

Источник: SQL Server - after insert trigger - update another column in the same table

ответ

14

Это ВСТАВИТЬ не повторно вызвать триггер.

SQL Server не будет вызывать триггеры INSTEAD OF рекурсивно, точно по причине, которую вы вызываете.

+3

+1 Правильно, это триггер INSTEAD OF. [MSDN говорит] (http://msdn.microsoft.com/en-us/library/ms189799.aspx): «Если триггер INSTEAD OF, определенный в таблице, выполняет инструкцию против таблицы, которая обычно запускает триггер INSTEAD OF опять же, триггер не вызывается рекурсивно. Вместо этого оператор обрабатывается так, как если бы таблица не имела триггера INSTEAD OF и запускала цепочку операций с ограничениями и после запуска триггера ». – Andomar

+0

Не могли бы вы объяснить, что произойдет в этом случае с помощью инструкции INSERT? Будет ли INSERT внутри триггера еще выполняться? –

+0

Спасибо, ребята. Отметил. – zunetastic

Смежные вопросы