Может ли INSERT привести к более чем одной строке в триггерной «вставленной» таблице? - PullRequest
4 голосов
/ 22 сентября 2010

Я знаю, что в триггере - по крайней мере для SQL Server - никогда не следует предполагать, что таблица inserted имеет только одну строку, что означает, что SQL в триггере, как этот, обычно плох:

select @UserID = ID from inserted

Но из любопытства, может ли набор операторов INSERT когда-либо привести к таблице inserted из более чем одной строки? Я знаю, что это достаточно просто с ОБНОВЛЕНИЕМ, но из моих тестов я не могу смоделировать аналогичный результат для вставки. Я пытался отправить через наборы вставок перед отправкой пакетного терминатора, например:

insert into TriggerTest (col2) select 'a'
insert into TriggerTest (col2) select 'b'
insert into TriggerTest (col2) select 'c'
go

А также оборачивая их в транзакции:

begin tran
insert into TriggerTest (col2) select 'a'
insert into TriggerTest (col2) select 'b'
insert into TriggerTest (col2) select 'c'
commit

Но это всегда приводит к тому, что триггер срабатывает 3 раза с таблицей inserted из 1 строки и никогда один раз с таблицей inserted из 3 строк.

Это совершенно логично для меня (в конце концов, это 3 отдельных утверждения), и мне на самом деле не нужно это делать, мне просто интересно, могут ли одни ВСТАВКИ вести себя иначе, чем это.

Редактировать: это глупый вопрос: конечно, может, при вставке набора результатов!

insert into TriggerTest (col2) select 'a' union select 'b'

... или любой другой набор.

Простите, здесь почти 3 часа ночи. Я оставлю этот вопрос здесь для людей, которые все равно должны знать лучше.

1 Ответ

5 голосов
/ 22 сентября 2010

1001 * попробовать *

insert into TriggerTest (col2) 
select 'a'
union 
select 'b'
union
select 'c'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...