如果更新的列值等于'已批准'

时间:2017-03-19 12:18:46

标签: sql sql-server tsql

我有两个名为test的表,test_audit.i在test表中有一个状态列 如果我使用值' APPROVED'更新了测试表中的状态列。然后只会触发更新后的触发器。我想要查询来创建触发器 (如果我更新状态,除了' APPROVED'触发器不会触发)

1 个答案:

答案 0 :(得分:1)

您无法控制触发器是否会被触发,但您可以控制触发器内部会发生什么。

你应该知道触发器是基于语句而不是行来触发的,所以要小心不要假设插入的表只包含一行。

话虽如此,你的触发器可能看起来像这样:

CREATE TRIGGER dbo.tr_Test ON dbo.Test FOR UPDATE
AS

    INSERT INTO test_audit (Id, Name, [Status], [time stamp])
    SELECT Id, Name, [Status], GETDATE()
    FROM Inserted I
    WHERE I.[Status] = 'APPROVED'
    AND EXISTS
    (
         SELECT 1
         FROM Deleted D
         WHERE D.Id = I.Id -- assuming primary key column is called id...
         AND D.[Status] <> 'APPROVED'
    )