我是T-SQL触发器领域的新手,并且希望对此有所帮助。
内容:
我有2个MSSQL表,票证(TicketNumber作为PrimaryKey,Status int等)和操作(Id作为PrimaryKey,IdTicket作为ForeignKey,Status int等)。
一张票可以有多个动作。
当用户将解决方案的状态更新为“关闭”(New.Status = 0 <> Old.Status)时, 必须触发该触发器,并使用相同的IDTicket检查所有解决方案的状态。 如果所有操作均已关闭, 然后触发器将关闭票证。 您知道我应该如何实现吗?
我已经开始编写触发器了,但是对于如何以及何时对触发器说来触发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表中的数据已经反映了触发该触发器的语句的结果。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。