Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何检查插入触发器(如更新触发器)上的列值_Sql_Sql Server_Triggers - Fatal编程技术网

Sql 如何检查插入触发器(如更新触发器)上的列值

Sql 如何检查插入触发器(如更新触发器)上的列值,sql,sql-server,triggers,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

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

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
”,我需要对insert执行一些操作。状态列可能的值为“
Success
”、“
Fail
”、“
Pending
”和“
Process
”。任何帮助都将不胜感激。提前谢谢

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

您需要将插入的
和删除的
视为一个可能包含多行的表

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
您没有处理更新多行的情况

您需要将插入的
和删除的
视为一个可能包含多行的表

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

我的问题已在这里得到解决,解决方案如下:

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

我的问题已在这里得到解决,解决方案如下:

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

感谢squirrel的回复,但我需要(如果更新(状态))操作,因为我必须执行join或Condition无法执行的多个操作。只有当status='Failure'有多个这样的查询并检查
status
的diff值时,查询才会执行。感谢squirrel的回复,但我需要类似的(如果更新(状态))操作,因为我必须执行join或condition无法执行的多个操作。只有当status='Failure'有多个这样的查询并检查status的diff值时,查询才会执行