我希望能够做到这样的事情:
declare @label varchar set @label = 'label_1' goto @label label_1: label_2:
当然,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
这产生了
1 2 4 6 7