小弟的存储过程中有这样一段代码:
     1  update student set parent_id=@case_id  where type='box' and label =@label1;
     2  update student set parent_id=@case_id where type='box' and  label =@label2;
     3  update student set parent_id=@case_id where type='box' and  label =@label3;
     4  update student set parent_id=@case_id  where type='box' and label =@label4;
     5  update student set parent_id=@case_id where type='box' and  label =@label5;
     6  update student set parent_id=@case_id where type='box' and  label =@label6
其中case_id label1 label2 label3 label4 label5 label6 为传进来的参数 而且 label2 label3 label4 label5 label6有可能传进来是空值
现在的问题是实际执行过程偶尔会出现只有1 2 3行被执行了 4 5 6 没有被执行(1-6传进的值全部不为空),怎么样写代码判断当1-6传进来的值不为空时 6行语句都执行了呢?当1-6都不为空时用try catch能不能捕获没有执行的异常呢?

解决方案 »

  1.   

    IF @label2+ @label3 +@label4 +@label5 +@label6 IS NULL 
    BEGIN
    RETURN 
    END BEGIN TRY  
    update student set parent_id=@case_id where type='box' and label =@label1;
    update student set parent_id=@case_id where type='box' and label =@label2;
    update student set parent_id=@case_id where type='box' and label =@label3;
    update student set parent_id=@case_id where type='box' and label =@label4;
    update student set parent_id=@case_id where type='box' and label =@label5;
    update student set parent_id=@case_id where type='box' and label =@label6
    END TRY 
    begin CATCH 
    SELECT
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;
    END CATCH 
      

  2.   

    补充下1#的if @label1+@label2+ @label3 +@label4 +@label5 +@label6 is null or len(@label1)=1 
       or len(@label2)=1 or len(@label3)=1 or len(@label4)=1 or len(@label5)=1 or len(@label6)=1 
    return
    else
    begin try  
    update student set parent_id=@case_id where type='box' and label =@label1;
    update student set parent_id=@case_id where type='box' and label =@label2;
    update student set parent_id=@case_id where type='box' and label =@label3;
    update student set parent_id=@case_id where type='box' and label =@label4;
    update student set parent_id=@case_id where type='box' and label =@label5;
    update student set parent_id=@case_id where type='box' and label =@label6
    end try 
    begin catch 
    select ERROR_NUMBER() AS ErrorNumber
    ,ERROR_SEVERITY() AS ErrorSeverity
    ,ERROR_STATE() AS ErrorState
    ,ERROR_PROCEDURE() AS ErrorProcedure
    ,ERROR_LINE() AS ErrorLine
    ,ERROR_MESSAGE() AS ErrorMessage;
    END CATCH 
      

  3.   

    这样写貌似有点问题:我传进来的1-6个值是这样的
    1 null null null null null null 
    1  2   null null null null null
    1  2   3    null null null null
    1  2   3     4   null null null
    1  2   3     4     5  null null
    1  2   3     4     5   6   null
      

  4.   

    这样写貌似有点问题:我传进来的1-6个值有这6中可能
    1 null null null null null  
    1  2   null null null null 
    1  2   3    null null null 
    1  2   3     4   null null 
    1  2   3     4     5  null 
    1  2   3     4     5   6   
      

  5.   

    应该是
    if @label1+@label2+ @label3 +@label4 +@label5 +@label6 is null or @label1='' 
       or  @label2='' or  @label3=''or  @label4='' or  @label5='' or  @label6=''