Выполнение триггера SQL Server - PullRequest
1 голос
/ 08 января 2011

Скажем, у меня есть триггер UPDATE на tableA, который вставляет новую запись в tableB.

CREATE TRIGGER insertIntoTableB
ON tableA
FOR UPDATE 
AS
   INSERT INTO tableB (...) VALUES (...)  
GO

Затем я запускаю эти операторы последовательно.Будет ли второй оператор UPDATE (UPDATE tableB) работать нормально?(т.е. дождитесь полного запуска триггера в таблице A)

UPDATE tableA
SET ...
WHERE key = 'some key'

UPDATE tableB
SET ...
WHERE key = 'newly inserted key from trigger'

Ответы [ 2 ]

2 голосов
/ 08 января 2011

Поведение зависит от конфигурации сервера nested triggers, см. Использование вложенных триггеров :

Оба триггера DML и DDL являются вложенными когда триггер выполняет действие, которое инициирует еще один триггер. Эти действия могут инициировать другие триггеры, и так далее. Триггеры DML и DDL могут быть вложено до 32 уровней. Вы можете контролировать, могут ли триггеры ПОСЛЕ вложенный через nested triggers опция конфигурации сервера. ВМЕСТО Триггеры OF (только триггеры DML могут быть Триггеры INSTEAD OF) могут быть вложенными независимо от этого параметра.

Когда триггер в таблице A срабатывает и внутри таблицы триггеров B обновляется, триггер в таблице B запускается немедленно. Триггер таблицы A завершил не , он заблокирован в ожидании завершения оператора UPDATE, который, в свою очередь, ожидает завершения триггера таблицы B. Однако обновления таблицы A уже произошли (при условии нормального триггера AFTER), и запрос таблицы A из триггера таблицы B приведет к обновлению.

1 голос
/ 08 января 2011

Если обновления последовательно закодированы в триггере ОБНОВЛЕНИЯ А, тогда да.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...