我是 T-SQL 触发器领域的新手,想帮助解决这个问题。
语境:
我有2个MSSQL表,门票(TicketNumber为PrimaryKey的,状态INT等)和行动(ID作为PrimaryKey的,IdTicket为ForeignKey的,状态INT,等...)。
一张票可以有多个动作。
你知道我应该如何实现吗?
我已经开始编写我的触发器,但是对于如何以及何时告诉触发器来触发 UPDATE Tickets 查询有点受阻。
USE [DataBaseName]
GO
CREATE TRIGGER [dbo].[TriggerClosureAction]
ON [dbo].[Actions]
AFTER UPDATE,DELETE
IF (UPDATE(Status))
BEGIN
IF (INSERTED.Status<>DELETED.Status AND INSERTED.Status=0) --Here do the If
Exists(SELECT Status FROM [dbo].[Actions] WHERE IdTicket=IdTicket
END;
END;
下面是我将如何写这个:
CREATE TRIGGER [dbo].[TriggerClosureAction]
ON [dbo].[Actions]
AFTER UPDATE,DELETE
AS
UPDATE t
SET [Status] = 0
FROM dbo.Tickets As t
-- update only records effected from the current operation
INNER JOIN DELETED As d
ON t.TicketNumber = d.IdTicket
-- No records left for that ticket number with status 1 in the actions table
WHERE NOT EXISTS
(
SELECT 1
FROM Actions As A
WHERE A.IdTicket = t.TicketNumber
AND A.[Status] <> 0
)
更新使用连接到票表deleted
表,以确保只有相关的记录被更新-因为deleted
表包含了所有来自受影响的记录delete
或update
触发触发器,那里没有留下记录,如果该语句actions
表,其中status
不是0
-由于这是一个后触发器,actions
表中的数据将已经反映触发触发器的语句的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句