我遇到触发器问题。
我为像这样的表
创建了一个触发器 ALTER TRIGGER [dbo].[manageAttributes]
ON [dbo].[tr_levels]
AFTER insert
AS
BEGIN
set nocount on
declare @levelid int
select @levelid=levelid from inserted
insert into testtable(testid) values(@levelid)
-- Insert statements for trigger here
END
但是当我将行插入到表tr_levels中时,就像这样
insert int tr_levels (column1,colum2) values(1,2)
触发完全触发
但是当我尝试像这样插入表格
时insert int tr_levels (column1,colum2) values(1,2),(3,4),(5,6)..
触发器不会触发所有行。它第一行只发射一次。是SQL的错误还是有解决方案来触发批量插入查询中所有行插入的触发器
答案 0 :(得分:3)
不,它会触发所有行 - 一次 - 但你忽略了其他行,就好像inserted
只包含一行一样。 select @scalar_variable=column from inserted
将从其中一行中任意检索一个值而忽略其他行。在inserted
子句
FROM
编写基于集合的插入
您需要将inserted
视为可包含0,1或多个行的表。所以,像:
ALTER TRIGGER [dbo].[manageAttributes]
ON [dbo].[tr_levels]
AFTER insert
AS
BEGIN
set nocount on
insert into testtable(testid)
select levelid from inserted
END
答案 1 :(得分:0)
你有同样的问题很多人都有这个问题:你认为触发器是每行触发的。它不是 - 它是每次操作。并且插入是一个表。你取一个(随机)值而忽略其余的值。修复它,它会工作。
装配工在基表中的每个语句中触发一次。因此,如果在一个语句中插入5行,则触发器触发一次,插入的行为5行。