了解 T-SQL GOTO
Posted
技术标签:
【中文标题】了解 T-SQL GOTO【英文标题】:Understanding T-SQL GOTO 【发布时间】:2015-12-24 13:57:08 【问题描述】:我的老师最近谈到了要在 Management Studio 中使用的语句“GOTO”,但一开始我不太明白。他表示,借助我可以自己命名的标签,GOTO 被用来跳转到不同的代码段。这是他用来代表他的例子的代码:
select 'first'
goto jump
select 'second'
jump:
select 'third'
当我执行代码时,果然打印出“第一”和“第三”。我现在的问题是,选择的“第二个”首先在那里做什么?
【问题讨论】:
GOTO
是一种控制查询流程的方法。在实际使用中,GOTO
需要满足一个条件(例如:IF SomeCol = 'SomeValue' GOTO jump
)。在提供的示例中,SELECT 'second'
的唯一用途是说明当您使用GOTO
时,会跳过该代码。
至于为什么它首先存在,这是一个不好的例子。一个更好的例子是:msdn.microsoft.com/en-us/library/ms180188.aspx 在这种情况下,不是在 if 中嵌入代码,而是使用 goto 来调用代码。如果多个 if 语句可以调用相同的 goto,这具有重构代码以提高可读性的优势;少复制/粘贴。然而,大多数人会用必要的代码创建一个函数/过程并调用它;这就是为什么 GoTo 不是一个受欢迎的选择。
【参考方案1】:
在您的示例中,第二个select
显然是不必要的。
GOTO
是程序代码的“控制流”示例。它是最早的计算机语言的构造,在处理诸如 C 或汇编代码之类的语言时直接映射到硬件的工作方式。从那时起,它已被包含在许多其他语言中。
GOTO
经常与IF
一起使用。但是,T-SQL 提供了更好的控制流功能,例如:
一般来说,您应该使用这些构造而不是GOTO
。事实上,GOTO
颇有争议。很多人认为它总是代码糟糕的标志(“意大利面条代码”有时用于描述这种类型的代码)。其他人会为异常处理(我有时会这样做)或某些类型的状态机之类的东西创建一个非常罕见的异常。
在我看来,GOTO
应该只在所有其他构造之后才被教授,并且只能用于非常特定的目的。
【讨论】:
以上是关于了解 T-SQL GOTO的主要内容,如果未能解决你的问题,请参考以下文章