在什么情况下可以接受使用T-SQL GOTO语句?

时间:2013-07-26 12:55:28

标签: sql tsql coding-style goto

在关于Microsoft T-SQL代码格式的“宗教”讨论中,我质疑GOTO语句是否仍然以T-SQL语法提供。在使用T-SQL的13年中,我从来没有机会使用它,并且确实不知道它是否存在。在简要搜索文档后,我确实存在它确实存在!

我的问题是:

是否至少有一个案例,其中GOTO语句会产生执行的解决方案比使用其他更高阶编程结构的解决方案更好?

  • 加密算法实施

我的问题是

  • 如何在不创建完整功能的情况下使用少量功能?
  • 如何在不复制/粘贴的情况下复制错误处理功能?

3 个答案:

答案 0 :(得分:5)

我几乎从不使用GOTO而且没有它就可以轻松生活。

我考虑使用它的一种情况是当我有复杂的代码进行大量的错误检查。我可能想在错误返回时采取一些操作,GOTO允许我为错误检查定义一个代码块。

您可以通过多种方式解决此问题,但GOTO是一个合理的选项,可以保证错误得到一致处理,并且代码不会被大量if @Error = 0 . . .语句混乱。

答案 1 :(得分:2)

我在大型脚本中看到过goto几次,人们用它来提高可读性。有时它更易读,但大多数情况下变成了意大利面条代码。

我只看到goto可能表现更好的一种情况。它在多个while循环中。你可以使用goto一次而不是多个breaks,它只存在于最里面的循环中。尽管如此,在我看来,break并不比goto好多少,它的编程风格都不是很好。

while ...
  while ...
    while... 
    break
  break
break


while ...
  while ...
    while... 
    goto endloops

endloops:

答案 2 :(得分:0)

我主要在SSIS不可用时使用GOTO语句(不要问!!)为用于ETL处理的大型存储过程提供一些控制流程。这是我唯一一次使用它们,虽然在这种情况下很有用,但它显然不是你所处的场景。