1

我有在 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

当触发触发时,@TempIdentity 获取标识列字段,并将此值设置到另一个表中。

但是,总是在触发 TRIGGER 之后,@TempIdentity 会变为 NULL。

为什么 TempIdentity 没有得到 Identity 字段?我应该在我的代码中更改什么?

4

2 回答 2

3

第一个问题:您在编写触发器时假设只插入一行。如果单个语句插入多行会发生什么?

触发器中有一个特殊的inserted表,其中包含由导致触发器触发的操作插入的所有行。你可以这样使用它:

INSERT INTO Table_Temp
    (TempID)
    SELECT i.YourIdentityColumn
        FROM inserted i
于 2012-01-18T18:44:41.500 回答
1

这个问题的原因是,顾名思义,它只返回你调用它的范围内SCOPE_IDENTITY()的 id 值。

从触发器调用它将从触发器中返回标识值这是NULL因为您没有插入任何行。

正如 Joe 建议的那样,使用该inserted表来获取所需的值,而不是使用此函数。

于 2012-01-18T18:46:36.057 回答