FETCH NEXT中的TSQL游标错误 - 第二次执行时修复

时间:2014-08-27 22:45:37

标签: sql sql-server tsql cursor

我在SQL Server Management Studio 2012中运行涉及游标的脚本。该脚本将逐行遍历数据库表,并将数据组合到插入第二个数据库表的单个行中。我相信光标是解决这个问题的最好方法。

我有一个似乎与我的代码无关的问题,因为当它发生时,我唯一的解决方案是简单地重新执行代码,并且错误不会再次发生。

我已将错误指向以下内容:

FETCH NEXT FROM @theCursor INTO @variable, @anotherVariable, @etc...

将发生以下错误

  

无法完成游标操作,因为自声明游标后设置选项已更改。

同样,极其令人困惑的问题是,如果我在收到此错误后重新运行脚本,则不会发生这种情况。我在数据库上创建了一个新查询,每次我都会收到错误。然后我重新运行脚本,每次都

另一个奇怪的事情是错误只会在FETCH行被执行大约五次之后才会发生!

我已尝试捕获错误并只是重新调用整个过程,但错误仍在继续。我所知道的唯一解决方案是通过SQL Server' Execute'再次运行脚本。命令(键盘上的F5)。

我知道这里没有太多事情要做。我自己没有太多具体细节。

1 个答案:

答案 0 :(得分:0)

所以,事实证明我不知道什么类型的东西可以被视为'SET选项',以及它们可能产生的影响。

在我的脚本中,我使用 dateformat 来处理数据库表中的一些不一致数据。它是这样的:

set dateformat mdy 
/* Do some DATETIME stuff with current format... */
set dateformat ymd 
// ...
set dateformat dmy
// ...
set dateformat ymd 
// ...

解决方案是不要像上面那样将 dateformat 保留为ymd。只需在我所有日期格式的末尾添加set dateformat mdy,就可以防止错误发生。奇怪的是,以set dateformat dmy结束不起作用,但set dateformat mdy会起作用。