SQL触发器在同一个表中
问题描述:
我有一个表,其中有operation
和status
两栏。我想设置一个触发器,以便每当更新operation
并且当前状态在值列表中时,UPDATEstatus
与operation
值。SQL触发器在同一个表中
以下是我想出迄今:
CREATE TRIGGER [dbo].[UPDATE_STATUS_FROM_OPS]
ON [dbo].[TICKET]
FOR UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE([operation]) AND
(SELECT [status] FROM [dbo].[TICKET]) in
('open','closed', 'in progress')
BEGIN
UPDATE [dbo].[TICKET]
SET [status]=[operation]
END
END
GO
这是不工作的。我错过了什么?
答
A更新触发发生在更新后。您可以访问插入特殊的表,它可以访问所有的更新值,并且还具有所有的旧值已删除表:
CREATE TRIGGER [dbo].[UPDATE_STATUS_FROM_OPS]
ON [dbo].[TICKET]
FOR UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE Ticket
SET [Status] = i.Operation
FROM ticket
INNER JOIN INSERTED i ON ticket.id = i.id
WHERE i.[Status] IN ('open','closed', 'in progress')
END
触发器**供应商高度特异性** - 所以请添加一个标签指定你是否使用'mysql','postgresql','sql-server','oracle'或'db2' - 或者其他的东西。 –