2017-07-19 41 views
0

我有一个表,其中有operationstatus两栏。我想设置一个触发器,以便每当更新operation并且当前状态在值列表中时,UPDATEstatusoperation值。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 

这是不工作的。我错过了什么?

+0

触发器**供应商高度特异性** - 所以请添加一个标签指定你是否使用'mysql','postgresql','sql-server','oracle'或'db2' - 或者其他的东西。 –

回答

2

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