これは、現在DBに設定されているトリガーの再帰レベルによって異なります。
これを行う場合:
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
またはこれ:
ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF
上記のトリガーは再度呼び出されることはなく、安全です(ある種のデッドロックに陥らない限り、それは可能かもしれませんが、私は間違っているかもしれません)。
それでも、私はしません これは良い考えだと思います。より適切なオプションは、INSTEADOFトリガー を使用することです。 。そうすれば、DBに対して最初の(手動の)更新を実行することを回避できます。トリガー内で定義されたものだけが実行されます。
INSTEAD OF INSERTトリガーは次のようになります:
CREATE TRIGGER setDescToUpper ON part_numbers
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO part_numbers (
colA,
colB,
part_description
) SELECT
colA,
colB,
UPPER(part_description)
) FROM
INSERTED
END
GO
これにより、元のINSERTステートメントが自動的に「置き換え」られ、明示的なUPPER呼び出しがpart_description
に適用されます。 フィールド。
INSTEAD OF UPDATEトリガーも同様です(単一のトリガーを作成することはお勧めしません。それらを分離しておいてください)。
また、これは@Martinコメントに対応しています。複数行の挿入/更新で機能します(例では機能しません)。