将Cursors保留在Try catch块中是一种好习惯吗?

时间:2011-11-18 08:25:45

标签: sql-server sql-server-2008 tsql

大多数情况下,当我在SQL Server中编写游标时,我将其保存在try / catch块中。在catch块中,我释放并关闭游标的活动。

你有什么看法?这是一个好习惯吗?

1 个答案:

答案 0 :(得分:1)

仔细思考,我认为你会同意try / catch for a cursor是不好的做法。

如果在声明或打开游标时遇到错误,那么catch块中的CLOSE将不起作用,它需要一个成功打开的游标。因此,您不应将这些部分包含在使用中。

稍微移动到循环和FETCH。我看不到在一个简单的循环语句中发生错误,如果它发生在FETCH中,那么@@ FETCH_STATUS被设置为-1而不是引发错误。所以包含这些部分毫无意义。

现在我们正在使用光标完成您正在完成的操作。如果此处发生错误,您要么修复它并继续,记录它并继续步骤到下一行,或者在操作的错误处理中明确地中断循环。你的解决方案会让你跳出一个catch块可能做得很好的操作。

完成循环后,无论是因为中断,获取错误还是记录的结束,您都可以关闭并在没有catch块的情况下解除分配,因此无需重复。

因此,您正在编写无用的代码,远离错误原因和潜在的解决方案,最糟糕的是,在未打开的游标上调用CLOSE来替换其他报告的错误。