2

初めてトリガーを使用しています。

同じテーブルの更新トリガーでテーブルのフィールドを更新すると、ループが発生しますか?SQLサーバーはこの再帰的な動作を防ぎますか?

ありがとう

4

2 に答える 2

3

このページ( を検索RECURSIVE_TRIGGERS) では、この動作を変更するために使用できるデータベース設定の一部について説明します。また、プロシージャを保護する 1 つの方法は、UPDATE()関数または関数のいずれかを使用するCOLUMNS_UPDATED()ことです。

たとえば、列AB、およびを含むテーブルがあり、列の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()も便利ですが、壊れやすいことがわかりました(列名ではなく列の位置に依存しています)。

于 2009-04-03T17:52:56.690 に答える