在一次关于 Microsoft T-SQL 代码格式的“宗教”讨论中,我质疑 GOTO 语句在 T-SQL 语法中是否仍然可用。在使用 T-SQL 的 13 年中,我从未有机会使用它,而且确实不知道它是否存在。在对文档进行简短搜索后,令我惊愕的是,它确实存在!
我的问题是这样的:
是否至少存在一种情况,GOTO 语句会产生一种性能优于使用其他高阶编程结构的解决方案?
- 加密算法实现
我的问题不是:
- 如何在不创建整个功能的情况下使用少量功能?
- 如何在不复制/粘贴的情况下复制错误处理功能?
在一次关于 Microsoft T-SQL 代码格式的“宗教”讨论中,我质疑 GOTO 语句在 T-SQL 语法中是否仍然可用。在使用 T-SQL 的 13 年中,我从未有机会使用它,而且确实不知道它是否存在。在对文档进行简短搜索后,令我惊愕的是,它确实存在!
我的问题是这样的:
是否至少存在一种情况,GOTO 语句会产生一种性能优于使用其他高阶编程结构的解决方案?
我的问题不是:
我几乎从不使用GOTO
,没有它也能轻松生活。
我会考虑使用它的一种情况是当我有复杂的代码进行大量错误检查时。当错误返回时,我可能想采取一些措施,并GOTO
允许我为错误检查定义单个代码块。
您可以通过多种方式解决此问题,但这GOTO
是一个合理的选择,可以保证一致地处理错误并且代码不会因大量if @Error = 0 . . .
语句而杂乱无章。
我在大型脚本中看到过几次 goto,人们用它来提高可读性。有时它的可读性更好,但大多数情况下它会变成意大利面条代码。
我只看到 goto 可能表现更好的一种情况。它在多个while循环中。您可以使用 goto 一次,而不是只存在最内层循环的多个中断。尽管如此,在我看来,break 并不比 goto 好多少,这两者都不是一种好的编程风格。
while ...
while ...
while...
break
break
break
while ...
while ...
while...
goto endloops
endloops:
我主要在 SSIS 不可用时使用 GOTO 语句(不要问!!)为用于 ETL 处理的大型存储过程提供一些控制流。那是我唯一一次使用它们,虽然在那种情况下很有用,但显然不是你会遇到的情况。