大多数情况下,当我在SQL Server中编写游标时,我会将其放在try/catch块中。在catch块中,我释放并关闭了游标的活动。
你的意见是什么?这是一个好的实践吗?
发布于 2011-11-26 22:02:51
仔细考虑一下,我想您会同意对游标使用try/catch是一种糟糕的做法。
如果在声明或打开游标时遇到错误,则catch块中的CLOSE将不起作用,它需要一个成功打开的游标。所以你不应该在使用中包含这些部分。
稍微移到循环和FETCH上。我看不到在简单的循环语句中会发生错误,如果在FETCH中发生错误,那么@@FETCH_STATUS将被设置为-1,而不是引发错误。因此,包含这些部分是没有意义的。
现在,我们开始使用光标完成的操作。如果这里发生错误,您可以修复它并继续,将其记入日志并继续下一行,或者显式地在操作的错误处理中中断循环。您的解决方案将使您跳出catch块可能起到一些作用的操作。
在完成循环之后,无论是因为中断、提取错误还是记录的结尾,您都可以在没有catch块的情况下关闭和释放记录,不需要重复自己。
因此,您正在编写无用的代码,远离错误的原因和潜在的解决方案,在最坏的情况下,将原本报告的错误替换为关于在未打开的游标上调用CLOSE的错误。
https://stackoverflow.com/questions/8179605
复制相似问题