簡體   English   中英

創建一個SQL觸發器以反轉先前的觸發器

[英]Create a SQL Trigger to reverse a previous Trigger

我正在嘗試創建多個觸發器。 當Crystal Reports更新相同格式的(隱藏)字段“重新打印”時,一個觸發器將更新“ ysnAcknowledged”字段。 如果用戶手動更新了“ ysnAcknowledged”字段,則第二個觸發器需要更新“ Reprint”字段(窗體復選框)。 我有第一個觸發器,我的問題是,如果更新“ ysnAcknowledged”字段,它將觸發我的第二個觸發器,有效地反轉了我想要的第一個觸發器。

第一個觸發條件:

CREATE TRIGGER SOPickListReprint
ON dbo.SalesOrder
AFTER UPDATE
AS

IF UPDATE(Reprint)
UPDATE dbo.SalesOrder
SET ysnAcknowledged = 1

第二次觸發:

CREATE TRIGGER SOPickListUpdate
ON dbo.SalesOrder
AFTER UPDATE
AS

IF UPDATE(ysnAcknowledged)
UPDATE dbo.SalesOrder
SET Reprint = 0
CREATE TRIGGER SOPickListUpdate
    ON dbo.SalesOrder
    AFTER UPDATE
AS

-- Update only rows where Reprint changed or ysnAcknowledged changed
-- > If ysnAcknowledged changed, force Reprint to 0, otherwise leave it as it is
-- > If Reprint changed, force ysnAcknowledged to 1, otherwise leave it as it is
UPDATE
    SalesOrder
SET
    Reprint         = CASE WHEN inserted.ysnAcknowledged <> deleted.ysnAcknowledged THEN 1 ELSE inserted.Reprint END,
    ysnAcknowledged = CASE WHEN inserted.Reprint         <> deleted.Reprint         THEN 0 ELSE inserted.ysnAcknowledged END
FROM
    SalesOrder
INNER JOIN
    inserted
        ON  inserted.<primary_key> = SalesOrder.<primary_key>
INNER JOIN
    deleted
        ON  deleted.<primary_key>  = SalesOrder.<primary_key>
WHERE
       inserted.ysnAcknowledged <> deleted.ysnAcknowledged
    OR inserted.Reprint         <> deleted.Reprint

我的解決方案:

CREATE TRIGGER SOPickListReprint
ON dbo.SalesOrder
AFTER UPDATE
AS

UPDATE dbo.SalesOrder
SET ysnAcknowledged = CASE WHEN deleted.Reprint = 0 AND inserted.Reprint = 1 THEN 1 ELSE inserted.ysnAcknowledged END,
Reprint = CASE WHEN deleted.ysnAcknowledged = 1 AND inserted.ysnAcknowledged = 0 THEN 0 ELSE inserted.Reprint END
FROM SalesOrder
INNER JOIN
inserted
    ON  inserted.SalesOrderID = SalesOrder.SalesOrderID
INNER JOIN
deleted
    ON  deleted.SalesOrderID  = SalesOrder.SalesOrderID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM