основные сомнения в триггерах T-SQL - PullRequest
1 голос
/ 02 августа 2010
  1. В чем разница между FOR и AFTER в определении триггера. Есть ли преимущества использования одного против другого?

  2. Если я выполню инструкцию update, которая обновляет 5 строк, срабатывает ли триггер (с FOR UPDATE) 5 раз? Если это так, есть ли способ запустить триггер только один раз для всей статистики ОБНОВЛЕНИЯ (даже если он обновляет несколько строк)

  3. Есть ли вероятность / ситуация, когда в «вставленной» или «удаленной» таблице будет более одной строки в любое время в жизненном цикле триггера. Если это так, могу ли я получить очень быстрый образец?

спасибо

1 Ответ

4 голосов
/ 02 августа 2010

Триггер запускается один раз для каждой партии и должен всегда разрабатываться с учетом этого.Да, если вы выполняете многострочное обновление или вставку, все строки будут во вставленных или удаленных таблицах.Например, команда

Delete table1 where state = 'CA' 

будет содержать все строки таблицы, в которых есть состояние CA, даже если их было 10 000 000.Вот почему тестирование триггера имеет решающее значение и почему триггер должен быть спроектирован для обработки многорядных действий.Триггер, который работает хорошо для одной строки, может привести к полной остановке базы данных на несколько часов, если он плохо спроектирован для обработки нескольких строк, или может вызвать проблемы с целостностью данных, если он не предназначен для правильной обработки нескольких строк.Триггеры не должны полагаться в основном на курсоры или циклы, а на операции на основе множеств.Если вы устанавливаете содержимое вставленной или разделенной переменной в переменную, вы почти наверняка ожидаете, что одна строка и ваш триггер не будут работать должным образом, когда кто-то будет выполнять над ним операцию на основе набора.виды триггеров DML, после триггеров, которые происходят после помещения записи в таблицу.Они обычно используются для обновления некоторых других таблиц.Прежде чем триггеры заменят вставку / обновление / удаление, они обычно используются для специальной обработки на вставляемой таблице.Важно знать, что триггер до не будет выполнять действие, которое было отправлено в таблицу, и если вы все еще хотите удалить / обновить или вставить как часть триггера, вы должны записать это в триггер.

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