理解 T-SQL GOTO

Understanding T-SQL GOTO

老师最近讲到语句'GOTO',要在Management Studio中使用,但一开始我不是很理解。他说 GOTO 被用来跳转到不同的代码段,借助于我可以自己命名的标签。这是他用来表示他的例子的代码:

select 'first'

goto jump
select 'second'

jump:
select 'third'

当我执行代码时,果然,它打印了 'first' 和 'third'。我现在的问题是 select 'second' 首先在那里做什么?

在你的例子中,第二个 select 显然是不必要的。

GOTO是程序代码的"control-flow"的例子。它是最早的计算机语言的一种构造,直接映射到硬件在处理 C 或汇编代码等语言时的工作方式。从那时起,它已被包含在许多其他语言中。

GOTO 通常与 IF 一起使用。但是,T-SQL 提供了更好的控制流功能,例如:

  • 同时
  • IF/BEGIN
  • TRY/CATCH

一般来说,您应该使用这些结构而不是 GOTO。事实上,GOTO 颇具争议。许多人认为它始终是糟糕代码的标志("spaghetti code" 有时用于描述此类代码)。其他人会为异常处理(我有时会这样做)或某些类型的状态机之类的事情做一个非常罕见的例外。

在我看来,GOTO 应该只在所有其他结构之后才被教授,并且只能用于非常特定的目的。