[英]Create a SQL Trigger to reverse a previous Trigger
I am trying to create multiple triggers. 我正在尝试创建多个触发器。 One trigger updates the 'ysnAcknowledged' field when the (hidden) field 'Reprint' in the same form gets updated by Crystal Reports. 当Crystal Reports更新相同格式的(隐藏)字段“重新打印”时,一个触发器将更新“ ysnAcknowledged”字段。 The second trigger needs to update the 'Reprint' field if the 'ysnAcknowledged' field is manually updated by the user (form checkbox). 如果用户手动更新了“ ysnAcknowledged”字段,则第二个触发器需要更新“ Reprint”字段(窗体复选框)。 I have the first trigger, my issue is if I update the 'ysnAcknowledged' field, it will trip my second trigger effectively reversing the first trigger before I want it to. 我有第一个触发器,我的问题是,如果更新“ ysnAcknowledged”字段,它将触发我的第二个触发器,有效地反转了我想要的第一个触发器。
1st trigger: 第一个触发条件:
CREATE TRIGGER SOPickListReprint
ON dbo.SalesOrder
AFTER UPDATE
AS
IF UPDATE(Reprint)
UPDATE dbo.SalesOrder
SET ysnAcknowledged = 1
2nd Trigger: 第二次触发:
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
My solution: 我的解决方案:
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.