IF 语句的问题

Rac*_*hel 0 null sql-server t-sql

我遇到了这个存储过程的问题。当用户选择“是”时,它应该按照它在“是”的 if 语句中所说的那样做,但它什么也不做,也不向数据库中插入任何内容。它适用于“否”条件。你能告诉我什么不起作用吗?

ALTER PROCEDURE [dbo].[sp_ff_Insert_ProjectApproved]
(

        @project_no varchar(6)
       ,@sequence_no int
       ,@grant_programme varchar(2)
       ,@jobs_approved int
       ,@grant_amount int
       ,@Committee varchar(4)
       ,@Meeting_no int
       ,@Minute_Item int
       ,@jobs_maintained int
       ,@approval_date date
       ,@approval_by int
       ,@comments varchar(1600)
       ,@created_by int
       ,@created_date datetime
       ,@updated_by int
       ,@updated_date datetime
       ,@approval varchar(5)
       ,@ratify varchar(3)




       --,@research_type varchar(1)='T'
)

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from


DECLARE @ReturnValue int,
        @post_approval_status varchar(3),
        @approval_status varchar(3),
        @current_status varchar(3)  

set @current_status = ( SELECT approval_status from approval_master_tbl
         WHERE project_no = @project_no
        AND sequence_no = @sequence_no -1)

    if @approval = 'No' and @sequence_no = 1 
    begin 
        set @Approval_Status = 'DRA'
        set @post_approval_status = NULL
    end

    else if   @approval = 'No' and @sequence_no > 1 
    begin 
       set @Approval_Status = 'DRA'
       set @post_approval_status = ''
    end


    else if @approval = 'Yes' and @sequence_no > 1 and @current_status = 'DRA' 
    begin 
       set @Approval_Status = 'APP'
       set @post_approval_status = ''
    end
--ISSUE IS HERE!!!!
    else if @approval = Null and @sequence_no > 1 and @current_status = 'DRA' 
    begin 
       set @Approval_Status = 'APP'
       set @post_approval_status = ''
    end

    else if @approval = 'No' and @sequence_no > 1 and @current_status = 'APP'

    begin  
        set @Approval_Status = 'APP'
        set @post_approval_status = '' 
    end

    else if @ratify = 'YES' and @sequence_no > 1 and @current_status = 'APP'

    begin   
       set @Approval_Status = 'APP'
       set @post_approval_status = 'ARF'        
    end

    else if @approval = 'No' and @sequence_no > 1 and @current_status = 'APP' AND @post_approval_status = 'ARF'
    begin       

        set @Approval_Status = 'HIS'
        set @post_approval_status = 'ARF'                       
    end

    else if @approval = 'YES' and @sequence_no > 1 and @current_status = 'HIS' 
    begin 

       set @Approval_Status = 'HIS'
       set @post_approval_status = ''
    end
    else if @ratify = 'YES' and @sequence_no > 1 and @current_status = 'HIS' 
    begin  
       set @Approval_Status = 'APP'
       set @post_approval_status = 'ARF'
    end
SET NOCOUNT ON




    BEGIN TRANSACTION



    INSERT INTO [dbo].[approval_master_tbl]
           ([project_no]
           ,[sequence_no]
           ,[grant_programme]
           ,[jobs_approved]
           ,[approval_status]
           ,[committee]
           ,[meeting_no]
           ,[minute_item]
           ,[jobs_maintained]
           ,[comments]
           ,[approval_date]
           ,[approved_by]
           ,[post_approval_status]
           ,[create_date]
           ,[create_by]
           ,[update_date]
           ,[update_by]       
           )
     VALUES(
            @project_no
            ,@sequence_no 
            ,@grant_programme
            ,@jobs_approved
            ,@approval_status 
            ,@committee
            ,@meeting_no
            ,@minute_item
            ,@jobs_maintained
            ,@comments
            ,@approval_date
            ,@approval_by
            ,@post_approval_status
            ,@created_date
            ,@created_by
            ,@updated_date
            ,@updated_by)

--Update previous Approval status

IF @sequence_no > 1 

UPDATE approval_master_tbl
        SET approval_status = @post_approval_status
  WHERE project_no = @project_no
        AND sequence_no = @sequence_no - 1




--Update Project Status in project Table

    if @approval = 'YES' 

        UPDATE PROJECT_TBL
             SET    PROJECT_STATUS = 'YET'
                    ,DATE_FIRST_APPROVED = @approval_date
                    ,actual_jobs_approved = @jobs_approved 
                    ,actual_amt_approved = @grant_amount 
        WHERE PROJECT_TBL.project_no = @project_no 



            COMMIT TRAN
             SET @ReturnValue = 0


             END TRY

    BEGIN CATCH

           IF @@ERROR <> 0 
                BEGIN
                    ROLLBACK TRAN
                    DECLARE @ErrorMessage NVARCHAR(4000)=ERROR_MESSAGE()
                    DECLARE @ErrorSeverity INT = ERROR_SEVERITY()
                    DECLARE @ErrorState INT = ERROR_STATE()

                    RAISERROR (@ErrorMessage,  
                               @ErrorSeverity,   
                               @ErrorState
                               );
                    SET @ReturnValue = 1
                    SET @ErrorMessage=ERROR_MESSAGE();
                    SELECT ERROR_MESSAGE() as ErrorMessage;
                END
        END CATCH           
    RETURN @ReturnValue         
END
Run Code Online (Sandbox Code Playgroud)

Dav*_*oft 6

这个

@approval = Null
Run Code Online (Sandbox Code Playgroud)

从不评估为 TRUE,它评估为 UNKNOWN。请参阅NULL 和 UNKNOWN

应该

@approval is Null 
Run Code Online (Sandbox Code Playgroud)