INSERT可以在触发器"插入"表中产生多行吗?

Gav*_*vin 4 sql sql-server triggers insert

我知道在触发器中 - 至少对于SQL Server - 应该永远不要假设该inserted表只有一行,这意味着触发器中的SQL通常是坏的:

select @UserID = ID from inserted
Run Code Online (Sandbox Code Playgroud)

但出于好奇,一组INSERT语句是否会导致一个inserted多行的表?我知道使用UPDATE很容易,但从我的测试中我无法模拟INSERT的类似结果.我已经尝试在发送批处理终结符之前发送多组插入,例如:

insert into TriggerTest (col2) select 'a'
insert into TriggerTest (col2) select 'b'
insert into TriggerTest (col2) select 'c'
go
Run Code Online (Sandbox Code Playgroud)

并将它们包装在交易中:

begin tran
insert into TriggerTest (col2) select 'a'
insert into TriggerTest (col2) select 'b'
insert into TriggerTest (col2) select 'c'
commit
Run Code Online (Sandbox Code Playgroud)

但它总是会导致触发器使用inserted1行表格触发3次,而从不使用inserted3行表格触发.

这对我来说是完全有意义的(毕竟它们是3个单独的语句),我不需要实际执行它,我只是想知道单独的INSERTS是否会对此行为不同.

编辑:这是一个愚蠢的问题:当然,插入结果集时可以!

insert into TriggerTest (col2) select 'a' union select 'b'
Run Code Online (Sandbox Code Playgroud)

......或任何其他类型的集合.

原谅我,这里差不多凌晨3点.我会把这个问题留给那些应该知道更好的人.

Ed *_*per 5

尝试

insert into TriggerTest (col2) 
select 'a'
union 
select 'b'
union
select 'c'
Run Code Online (Sandbox Code Playgroud)