2012-01-18 90 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