我想写一个存储过程,想根据条件动态的执行GOTO 比如
declare @a int
,@b int
在这里,我想根据@b进行goto
如果@b=1 就到zyb1,但不用if,因为我在实际应用中比这个复杂
类似于 goto 'zyb'+convert(nvarchar,@b)zyb1:
set @a=@a+1zyb2:
set @a=@a+212zyb3:
print @a

解决方案 »

  1.   

    declare   @a   int 
    ,@b   int set @b = 1
    set @a = 2
    set @a =  @a +
      case when @b = 1 then 1
      else 212 end  
    print   @a/*3
    */
      

  2.   

    declare   @a   int 
    ,@b   int set @b = 3
    set @a = 2
    set @a =  @a + case @b when 1 then 1
                           when 2 then 2
                           else 212 end  
    print   @a/*214
    */
      

  3.   

       就到zyb1,但不用if,因为我在实际应用中比这个复杂 
    类似于   goto   'zyb'+convert(nvarchar,@b) -------------------------
    goto为标签用法...
    楼主的可用 if 判断
    if b=1
    beign
    ... 
    end
    else if 
    begin 
    end
    else 
    ....这样的表达式
      

  4.   

    对于楼主列出的问题,确实用if或case when好一些.
    但实际应用确实可能不是我们想像的到的, goto的label段可以重复利用,if就没有办法.但你想要
    GOTO 字串变量或变量组合, 这样是不行的, 语法不支持.在这一点上,你可以利用if或case whenif @b=..
      GOTO L1
    if @b=..
      GOTO L2
    ...
    L1:
     dosomething
    L2:
     dosomething
    L3:
     dosomething就好比,前台应用程序里写了多个子方法/函数(function,sub....),使用switch 或 select 或 if来调用不同的方法或函数,达到局部代码重用.在sql里, if + goto + label 是一个解决方式.
    也可以使用存储过程嵌套调用. 即将子代码段也建为存储过程.或者函数.
      

  5.   

    goto 不是好方法,还是用CASE WHEN 吧