SQL Server触发if else语句

时间:2018-07-12 06:06:15

标签: sql sql-server triggers

此代码缺少什么?如果我正在更新worker的状态,并且已删除的状态为6,则它应该仅执行第一个嵌套的if语句,而不是在第二个if else语句中执行,而是在这种情况下,即使我删除了数据,也要执行worker状态是6时执行两个if else语句。.任何帮助或建议对我来说都是一个很大的帮助。

这是我的代码

if exists(select * from inserted) and exists(select * from deleted)
begin
    select
        @Worker_id = ID,
        @StatusID = StatusID,
        @Date = GETDATE()
    from 
        inserted;

    select
        @oldStatusID = StatusID
    from 
        deleted;

    if(@StatusID <> @oldStatusID)
        if(@oldStatusID = 6)
            if(@StatusID = 1 or @StatusID = 2 or @StatusID = 3)
            begin
                select
                    @Description = FirstName + ' ' + LastName + ' has been Hired'
                from 
                    inserted; 

                EXEC sp_history @Worker_id,'HIRED',@Description,@Date
            end
            else if(@oldStatusID = 1 or @oldStatusID = 2 or @oldStatusID = 3 or @oldStatusID = 4 or @oldStatusID = 5 or @oldStatusID = 9)
                if(@StatusID = 1)
                begin
                    select
                        @Description = FirstName + ' ' + LastName + ' has changed its status into Laborer'
                    from 
                        inserted; 

                    EXEC sp_history @Worker_id,'CHANGED STATUS(laborer)',@Description,@Date
                end

                if(@StatusID = 2)
                begin
                    select
                        @Description = FirstName + ' ' + LastName + ' has changed its status into Main Office'
                    from inserted; 

                    EXEC sp_history @Worker_id,'CHANGED STATUS(main office)',@Description,@Date
                end

                if(@StatusID = 3)
                begin
                    select
                        @Description = FirstName + ' ' + LastName + ' has changed its status into Admin'
                    from inserted; 

                    EXEC sp_history @Worker_id,'CHANGED STATUS(admin)',@Description,@Date
                end

                if(@StatusID = 4)
                begin
                    select
                        @Description = FirstName + ' ' + LastName + ' has changed its status into Blocklisted'
                    from inserted; 

                    EXEC sp_history @Worker_id,'BLOCKLISTED',@Description,@Date
                end

                if(@StatusID = 5)
                begin
                    select
                        @Description = FirstName + ' ' + LastName + ' has changed its status into Terminated'
                    from inserted; 

                    EXEC sp_history @Worker_id,'TERMINATED',@Description,@Date
                end

                if(@StatusID = 9)
                begin
                    select
                        @Description = FirstName + ' ' + LastName + ' has changed its status into Resigned'
                    from inserted; 

                    EXEC sp_history @Worker_id,'RESIGNED',@Description,@Date
                end
    end

0 个答案:

没有答案