2017-07-19 45 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