2

テーブルの1つにトリガーを書き込んでいます。私がやりたいのは、挿入されたフィールドの1つで別のテーブル列を更新したいということです。

CREATE TRIGGER [dbo].[Trigger_TestTrigger]
ON [dbo].[TableA]
FOR INSERT
AS

BEGIN
    SET NoCount ON
    DECLARE @variable UNIQUEIDENTIFIER
    SELECT @variable = TableB.colA1 FROM TableB WHERE (TableB.colB1 = INSERTED.colA1) 
    IF (@variable != INSERTED.colA2)
    BEGIN
        UPDATE TableB SET colB4 = INSERTED.colA2 WHERE TableB.colB1 =INSERTED.colA1
    END 
END

ただし、このトリガーをデータベースに作成するとエラーが発生します。エラーは次のとおりです。

 "INSERTED.colA1" could not be bound.
 "INSERTED.colA2" could not be bound.

通常INSERTEDには、挿入されたばかりの値があります。では、テーブル「TableA」に挿入した値をどのように取得する必要がありますか。挿入されたものがこのように使用できない場合、これを行う正しい方法は何ですか。

4

2 に答える 2

4

他のテーブルと同じように挿入されたものを扱う必要があります

SELECT @variable = TableB.colA1 
FROM TableB 
     inner join inserted ON TableB.colB1 = INSERTED.colA1

inserted複数の行が含まれている可能性が あることに注意してください。これにより、実際に常に必要な結果が得られるわけではありません

于 2012-08-28T11:29:34.757 に答える
2

INSERTED をテーブルとして処理する必要があります。

于 2012-08-28T11:30:43.007 に答える