【发布时间】:2019-04-19 14:50:56
【问题描述】:
我正在尝试编写触发器并希望有一个AFTER UPDATE 触发器,这样:
-
仅当所有“TypeA”记录(通过 UI)更新为“Issued”时,-->对于每个唯一的 OrderID:
Master1 的状态(对于相同的 OrderID)应更新为 'TypeA 发布'。
同样,当所有TypeB在Details1中发出时, Master1.Status 应该是 'TypeB Issued' 等其他类型
由于每个类型(在 Details1 中)的行数可能会有所不同,因此我使用 Not Issued 的计数值作为条件,因为触发器仅在计数变为 0 时才需要触发
Master2.Status 仅针对 Details1 表中的所有 TypeA 状态更改(已发布)更新为 TypeA Issued。
我尝试了这个触发器,但它更新了 Master1,即使 Details1 中的 Status 值设置为 Not Issued。另外,我应该在哪里以及如何包含 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
【问题讨论】:
-
你不应该用这些标签得到任何答案。这与 vb.net 或 n 层架构无关。我会为您更正它们,但您没有提及您使用的是哪个数据库。
-
我已根据问题陈述重新标记它
-
@Mary,很抱歉。正在尝试将 MS SQL Server 添加为标记。
标签: sql-server tsql database-trigger