我知道在触发器中 - 至少对于SQL Server - 不应该假设inserted
表只有一行,这意味着触发器中的SQL通常是坏的:
select @UserID = ID from inserted
但出于好奇,一组INSERT语句是否会产生多行的inserted
表?我知道使用UPDATE很容易,但从我的测试中我无法模拟INSERT的类似结果。我已经尝试在发送批处理终结符之前发送多组插入,例如:
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
但是它总是会导致触发器使用{1}} 1行表触发3次,而且永远不会一次使用3行inserted
表。
这对我来说完全有意义(毕竟它们是3个单独的陈述),我不需要真正做到这一点,我只是想知道单独的INSERTS是否会对此行为不同。
编辑:这是一个愚蠢的问题:当然,插入结果集时可以!
inserted
......或任何其他类型的集合。
原谅我,这里差不多凌晨3点。我会把这个问题留给那些应该知道更好的人。
答案 0 :(得分:5)
试
insert into TriggerTest (col2)
select 'a'
union
select 'b'
union
select 'c'