3 つのテーブル (_items、_invoiceHeader、_invoiceDetails) があるとしましょう。_invoiceDetails に更新トリガーを作成したので、_itemCode を更新すると、_items テーブルの _balance 列を更新できます。しかし、問題は、_items テーブルの _itemCode 列を更新すると、_items および _invoiceDetails テーブルの _itemCode 列に対するカスケード ルールにより、_invoiceDetails テーブルのトリガーがすぐに実行されることです。_invoiceDetails テーブルで発生した更新が、カスケードまたは同じテーブル _invoiceDetails の更新のために行われたことをどのように知ることができますか。
このコードを _invoiceDetails テーブルの更新トリガー内に配置します。
if(UPDATE(itemCode)) // I need a condition here to prevent the implementation if the update happened because of cascade rule.
BEGIN
UPDATE items
SET balance=balance+d.quantity
FROM items
INNER JOIN DELETED d
ON items.accountsItemCode=d.accountsItemCode
UPDATE items
SET balance=balance-i.quantity
FROM items
INNER JOIN INSERTED i
ON items.itemCode=i.itemCode
END