Одновременные триггеры в SQL Server - PullRequest
0 голосов
/ 24 июня 2010

В Microsoft SQL Server:

Я добавил триггер вставки для моей таблицы ACCOUNTS, который выполняет вставку в таблицу BLAH на основе вставленных значений.Вставки приходят только из одного места, и они происходят по одному.(Под этим я подразумеваю, что в транзакции никогда не бывает двух вставок - два веб-пользователя могут теоретически щелкнуть «Отправить», и их вставки будут выполнены почти одновременно).

Нужно ли адаптировать триггердля обработки более чем одной вставленной строки, специальной таблицы, созданной для триггеров - или каждая отдельная транзакция вставки запускает триггер отдельно?

Ответы [ 3 ]

3 голосов
/ 24 июня 2010

Каждая вставка вызывает триггер. Однако, если одна вставка добавляет более одной строки, триггер вызывается только один раз, поэтому ваш триггер должен иметь возможность обрабатывать несколько записей.

Степень детализации находится на уровне инструкции INSERT, а не на уровне транзакции.

Так что нет, если у вас есть две транзакции, вставленные в одну таблицу, каждая из них вызовет триггер ATOMICALLY.

BOB

1 голос
/ 24 июня 2010

Если вы выполняете только одну вставку в транзакции, я не вижу причин для того, чтобы в inserted было больше строк, кроме случаев, когда была возможность рекурсивных триггерных вызовов.

Тем не менее, этоможет вызвать проблемы, если вы в будущем измените поведение своего приложения и забудете изменить триггеры.Поэтому, чтобы быть уверенным, я бы предпочел реализовать триггер, как если бы он мог содержать несколько строк в inserted.

1 голос
/ 24 июня 2010

в вашей ситуации каждая вставка происходит в своей собственной транзакции и запускает триггер по отдельности, так что с вами все будет в порядке.если когда-либо возникали обстоятельства, когда у вас было две вставки в одной транзакции, вам пришлось бы изменить триггер, чтобы выполнить вставку на основе набора из таблицы «вставленных» или какой-либо курсор, если требуется дополнительная обработка.

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