如何检查插入触发器上的列值,如更新触发器

时间:2018-05-30 05:22:18

标签: sql sql-server triggers

我有更新状态列值更改的更新触发器并更新其他表记录,它工作正常。这是我的代码

CREATE TRIGGER [dbo].[trgAfterUpdate] ON [dbo].[recharge_request]

FOR UPDATE
    AS

    DECLARE @status varchar(50);

    SELECT @status=i.status FROM inserted i; 

    IF UPDATE (status)
        BEGIN
            IF @status='Failure'
                --My Update Statement
            ELSE IF @status='Success'
                --My Update Statement
        END

现在我想为检查状态列值创建一个插入触发器并执行其他表操作。因为在某些情况下状态列值不会更新到我需要在插入时执行某些操作,如果列值为“Success”或“Fail”。状态列可能的值为“Success”,“Fail”,“Pending”和“Process”。任何帮助将不胜感激。提前谢谢!

2 个答案:

答案 0 :(得分:0)

DECLARE @status varchar(50);

SELECT @status=i.status FROM inserted i;

您没有处理正在更新多行的情况。

您需要将inserteddeleted视为可能包含多于一行的表格

IF UPDATE (status)
BEGIN

    update t
    set    ....
    from   inserted i
           inner join some_table t on i.somecol = t.anothercol
    where  t.status = 'Failure'

    update t
    set    ....
    from   inserted i
           inner join some_table t on i.somecol = t.anothercol
    where  t.status = 'Success'

    . . . . . -- other status value

END

答案 1 :(得分:0)

我的问题已解决,这是解决方案:

CREATE TRIGGER [dbo].[trgAfterInsert] ON [dbo].[recharge_request]
AFTER INSERT
    AS
        BEGIN
            DECLARE @status varchar(50);

            SELECT @status=i.status FROM inserted i; 

            IF @status='Success'
                BEGIN
                    --My Update statement
                END
        END