初めてトリガーを使用しています。
同じテーブルの更新トリガーでテーブルのフィールドを更新すると、ループが発生しますか?SQLサーバーはこの再帰的な動作を防ぎますか?
ありがとう
初めてトリガーを使用しています。
同じテーブルの更新トリガーでテーブルのフィールドを更新すると、ループが発生しますか?SQLサーバーはこの再帰的な動作を防ぎますか?
ありがとう
このページ( を検索RECURSIVE_TRIGGERS
) では、この動作を変更するために使用できるデータベース設定の一部について説明します。また、プロシージャを保護する 1 つの方法は、UPDATE()
関数または関数のいずれかを使用するCOLUMNS_UPDATED()
ことです。
たとえば、列A
、B
、およびを含むテーブルがあり、列のC
値が更新されC
たときに の値を自動的に変更する場合はB
、トリガーで呼び出しを保護できます。
CREATE TRIGGER Whatever ON TableName AFTER UPDATE
AS
BEGIN
IF UPDATE(B)
BEGIN
/* Update column C here */
END
END
C
このようにして、トリガーによって列が更新され たときにトリガーを再帰的に呼び出すことを回避できます。COLUMNS_UPDATED()
も便利ですが、壊れやすいことがわかりました(列名ではなく列の位置に依存しています)。