SQL触发器位于同一个表中

时间:2017-07-19 13:31:23

标签: sql sql-server triggers

我的表格中有operationstatus作为两列。我想设置一个触发器,以便每当operation更新并且当前状态位于值列表中时,更新 statusoperation值。

这是我到目前为止所提出的:

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

这根本不起作用。我错过了什么?

1 个答案:

答案 0 :(得分:2)

在更新后发生更新触发器。您可以访问可以访问所有更新值的特殊表Inserted以及具有所有旧值的Deleted表:

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