我有在TRIGGER中实现的scope_identity()。
ALTER TRIGGER TempProcTrig
ON Table_temp2
AFTER insert
AS
BEGIN
declare @TempIdentity int
set @TempIdentity =scope_identity()
insert Table_Temp(TempID)
values(@TempIdentity)
END
当触发TRIGGER时@TempIdentity获取Identity列字段, 并将此值设置为另一个表。
但是,总是在触发TRIGGER之后,@ TempIdentity变为NULL。
为什么TempIdentity不会获得身份字段?我应该在代码中更改什么?
答案 0 :(得分:3)
第一个问题:你正在编写你的触发器,假设只插入一行。如果单个语句插入多行会发生什么?
触发器中有一个特殊的inserted
表,其中包含导致触发器触发的操作所插入的所有行。你可以这样使用它:
INSERT INTO Table_Temp
(TempID)
SELECT i.YourIdentityColumn
FROM inserted i
答案 1 :(得分:1)
这个问题的原因是,顾名思义,SCOPE_IDENTITY()
only returns the id value from the scope that you call it in.
从触发器调用它将从触发器中返回标识值,这是NULL
,因为您没有插入任何行。
正如Joe建议的那样,使用inserted
表来获取所需的值而不是此函数。