1

この簡単な例のトリガーを考えると:

CREATE TRIGGER example_update
ON example_table
FOR UPDATE
AS BEGIN
   if update(someColumn) begin
      update example_table SET last_update_date = GETDATE() WHERE id IN (SELECT id FROM inserted);
   end
END

someColumn の古い値と someColumn の新しい値が等しい場合、update(someColumn) は true または false を返しますか? たとえば、次の 2 つの SQL ステートメントを実行するとします。

UPDATE example_table SET someColumn=1;
UPDATE example_table SET someColumn=1;

2 番目のステートメントは、トリガーの if ブロックを起動しますか?

また、これを実行すると、次のように推測できますか?

UPDATE example_table SET otherColumn=1;

次に、トリガーの update(someColumn) は false を返します。

これが繰り返しである場合は申し訳ありません: 関数が update と呼ばれるという事実により、検索結果が update ステートメント (update 関数とは非常に異なる) であふれ、この動作を特定することが非常に困難になりました。

4

1 に答える 1

12

このUPDATE()関数は、値が変更されたかどうかを識別せず、列が更新されたことのみを識別します。これを行うには、inserteddeleted疑似テーブルの値を比較する必要があります。

于 2012-04-16T20:34:26.940 に答える