Ome*_*ari 1 sql sql-server goto
我希望能够做到这样的事情:
declare @label varchar
set @label = 'label_1'
goto @label
label_1:
label_2:
Run Code Online (Sandbox Code Playgroud)
当然,sql server给了我一个不正确的语法错误...所以我想知道我是否仍然可以用略有不同的语法来做到这一点?
我已经编写了一个可能对其他人有用的功能性黑客.在SQL Server 2008上,您无法动态构建goto,也无法在变量中提供标签.旧学校黑客是加载变量,跳转到单个点然后使用if语句来确定真实目的地.
GOTO当然被认为是有害的,通常是一个坏主意.
l1:
print '1'
l2:
print '2'
goto l4
l3:
print '3' -- should not print
l4:
print '4'
declare @lbl nvarchar(5)
set @lbl = N'l6'
goto vjump
-- goto @lbl -- doesn't work
-- exec('goto ' + @lbl) -- doesn't work
l5:
print '5'
l6:
print '6'
l7:
print '7'
return
vjump:
if @lbl = 'l1'
goto l1
if @lbl = 'l2'
goto l2
if @lbl = 'l3'
goto l3
if @lbl = 'l6'
goto l6
Run Code Online (Sandbox Code Playgroud)
这产生了
1
2
4
6
7
Run Code Online (Sandbox Code Playgroud)