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

TRIGGER が発火すると @TempIdentity は Identity 列フィールドを取得し、この値を別のテーブルに設定します。

ただし、TRIGGER が起動された後は常に、@TempIdentity が NULL になります。

TempIdentity が Identity フィールドを取得しないのはなぜですか? コードで何を変更する必要がありますか?

4

2 に答える 2

3

最初の問題: 1 行だけが挿入されるという前提でトリガーを作成しています。1 つのステートメントで複数の行が挿入されるとどうなりますか?

トリガーで使用できる特別なinsertedテーブルがあり、トリガーの起動の原因となった操作によって挿入されたすべての行が含まれています。次のように使用できます。

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

この問題の原因は、名前が示すように、呼び出したスコープSCOPE_IDENTITY()から id 値のみを返すことです。

トリガーから呼び出すと、トリガー内から ID 値が返されますこれはNULL、行を挿入していないためです。

Joe が提案するようinsertedに、この関数の代わりにテーブルを使用して必要な値を取得します。

于 2012-01-18T18:46:36.057 に答える