如何在scope_identity()的帮助下获取身份值

时间:2012-01-18 18:35:48

标签: sql triggers scope-identity

我有在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不会获得身份字段?我应该在代码中更改什么?

2 个答案:

答案 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表来获取所需的值而不是此函数。