首页 > 解决方案 > 在插入/更新发生之前触发更改数据,然后继续

问题描述

我试图在插入/更新发生之前更改数据,下面将描述我要完成的工作,我只是不知道如何。

CREATE TRIGGER [my trigger]
ON [dbo].[my table] 
INSTEAD OF INSERT, UPDATE 
AS
BEGIN;
    IF(  **value of column [x] = "a"**  )
        **change value of column [y] to "b"**

    **continue insert or update**
END;

我知道伪表inserted可用,但我不知道如何处理不同的触发器(插入或更新)。

我应该如何继续?

标签: tsql

解决方案


使用您的触发器AFTER INSERT/UPDATE代替INSTEAD OF,因此您只需要事后更新该值,而无需重做原始插入或更新操作。

CREATE TRIGGER [my trigger] ON [dbo].[my table] 
    AFTER INSERT, UPDATE 
AS
BEGIN

    IF UPDATE(Columnx)
    BEGIN

        UPDATE T SET
            ColumnY = 'New Value'
        FROM
            [dbo].[my table] AS T
            INNER JOIN inserted AS I ON T.KeyColumn = I.KeyColumn
        WHERE
            I.ColumnX = 'Value To Check'

    END

END

推荐阅读