【问题标题】:How to check column value on insert trigger like Update trigger如何检查插入触发器(如更新触发器)上的列值
【发布时间】:2018-05-30 05:22:18
【问题描述】:

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

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”。任何帮助将不胜感激。提前致谢!

【问题讨论】:

    标签: sql sql-server triggers


    【解决方案1】:
    DECLARE @status varchar(50);
    
    SELECT @status=i.status FROM inserted i;
    

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

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

    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
    

    【讨论】:

    • 感谢 squirrel 的回复,但我需要类似 (IF UPDATE (status)) 操作,因为我必须执行连接或条件无法执行的多项操作
    • 只有当 status = 'Failure' 有多个这样的查询并检查 status 的差异值时才会执行查询
    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多