我想写一个存储过程,想根据条件动态的执行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
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
,@b int set @b = 1
set @a = 2
set @a = @a +
case when @b = 1 then 1
else 212 end
print @a/*3
*/
,@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
*/
类似于 goto 'zyb'+convert(nvarchar,@b) -------------------------
goto为标签用法...
楼主的可用 if 判断
if b=1
beign
...
end
else if
begin
end
else
....这样的表达式
但实际应用确实可能不是我们想像的到的, 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 是一个解决方式.
也可以使用存储过程嵌套调用. 即将子代码段也建为存储过程.或者函数.