2015-09-01 2 views
2

Мне нужно знать, как выполняется выполнение триггера для нижеприведенного сценария.Выполнение триггера SQL Server при пакетном обновлении

У меня есть 20 записей в таблице, и у меня есть триггер AFTER INSERT, UPDATE на этом столе. Когда я обновляю все записи в этой таблице с помощью команды MERGE или пакетного обновления, как будет запускаться триггер?

Выполняется ли для каждой строки за строкой?

Или он выполняется один раз за партию (один раз для всех 20 записей)?

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

+0

Как правило, вы должны стараться избегать написания циклов в SQL - естественный способ работы в терминах * наборов * строк. Это как истина внутри триггера, как и везде. –

ответ

4

Триггеры в SQL Server всегда выполнить один раз в партии - нет никакой возможности для «для каждой строки» триггеров в SQL Server.

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

+0

Затем, если мне нужно записать обновленные данные в другую таблицу, если я напишу 'Insert Into SomeTable SELECT * FROM UPDATED', скопирует ли все обновленные данные в другую таблицу? @marc_s – tarzanbappa

+1

@tarzanbappa: почти - триггер имеет две «псевдо» таблицы - «вставлен» и «удален». В случае инструкции 'UPDATE',' deleted' содержит старые значения (перед 'UPDATE'), а' вставленный' содержит новые значения. Нет никакой «обновленной» псевдо-таблицы –

+0

извините, я ошибся, поэтому, если это «Вставить в SomeTable SELECT * FROM DELETED», скопирует ли все обновленные данные в другую таблицу? @marc_s – tarzanbappa

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