理解 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
应该只在所有其他结构之后才被教授,并且只能用于非常特定的目的。
老师最近讲到语句'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
应该只在所有其他结构之后才被教授,并且只能用于非常特定的目的。