2012-01-18 105 views
1

我有在TRIGGER中实现的scope_identity()。如何通过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不能获得标识字段?我应该在我的代码中更改什么?

回答

3

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

在触发器中有一个特殊的inserted表,其中包含引起触发器触发的操作插入的所有行。你可以使用这种方式:

INSERT INTO Table_Temp 
    (TempID) 
    SELECT i.YourIdentityColumn 
     FROM inserted i 
+0

+1 - 这是一个超常见的问题(特别是在过去一个月左右的SO) – JNK 2012-01-18 18:48:15