条件后更新触发器

时间:2019-04-19 14:50:57

标签: sql-server tsql database-trigger

我正在尝试编写触发器,并且希望使用AFTER UPDATE触发器,以便:

  1. 仅当所有“ TypeA ”记录(通过UI)更新为“ 已发布”时,->为每个唯一的OrderID:

    Master1的状态(对于相同的OrderID)应更新为' TypeA 发出”。

    类似地,当所有TypeB在Details1中发布时,  Master1.Status应该为“ 已颁发B型”,对于其他类型,依此类推

    由于每种类型的行数(在Details1中)可以变化,因此我将“未发出”的计数值用作条件,因为仅在计数变为0时才需要触发触发器

  2. Master2.Status将更新为TypeA,仅针对Details1表中所有TypeA状态更改(已更改为“已发布”)。

我尝试了此触发器,但是即使Details1中的Status值设置为Not Issued,它也会更新Master1。另外,我应该在哪里以及如何添加Master2更新,或者应该专门针对Master2更新编写另一个触发器

CREATE TRIGGER Master1_TypeAIssued_StatusUpdate
ON Details1
AFTER UPDATE
AS
BEGIN
    IF (SELECT COUNT(Details1.Status)
          FROM Details1
          INNER JOIN Master1 ON Details1.OrderID = dbo.Master1.OrderID
          WHERE Details1.Status = 'Not Issued' AND
          Details1.Type = 'TypeA') = 0
      BEGIN
          RETURN
      END
  UPDATE Master1 SET Master1.Status = 'TypeA Issued'
END


OrderID     Type        Status
W1          TypeA       Not Issued
W1          TypeA       Not Issued
W1          TypeA       Not Issued
W1          TypeB       Not Issued
W1          TypeB       Not Issued
W1          TypeC       Not Issued
W2          TypeA       Not Issued
W2          TypeA       Not Issued
W2          TypeB       Not Issued

Master1 Table
OrderID     Status
W1          Pending
W2          Pending

Master2 Table
OrderID     Status
W1          Pending
W2          Pending

1 个答案:

答案 0 :(得分:0)

尝试将您的情况更改为以下内容:

teamA

这是因为当记录的状态为“非问题”时,您不应该更新