SQL - 打开SCROLL CURSOR

时间:2012-03-13 22:21:38

标签: sql sql-server cursor

我正在尝试运行一个可执行文件,其中我有一个常规CURSOR和一个SCROLL CURSOR查看单个表。 CURSOR用于跟踪外循环,而SCROLL CURSOR有助于内循环。当我尝试运行该程序时,似乎代码被卡住试图打开SCROLL CURSOR(例如它将打印'OK'但不是'CODE DOES NOT REACH HERE')。我正在使用SQL 2008 R2。我已经尝试运行我的代码的非常缩放的版本,看起来我甚至无法在我的计算机上的任何情况下打开SCROLL CURSOR所以我想知道它是否是一些奇怪的兼容性isssue或者我在某种程度上有错误的语法(即使它很简单)。值得一提的是,在测试我的代码时,我能够在另一台计算机上打开一个SCROLL CURSOR。

你有什么想法可能导致这个吗?我已经复制了我想要运行的代码(用于声明所有变量的伪代码)。提前谢谢。

create proc expiration_exec2

AS

SET NOCOUNT ON

DECLARE bunch of @variables
...

DECLARE cursor_main CURSOR FOR
SELECT Member_ID,redeemed_month,activity_month,tenure_month,min_pts,expired_pts,closed_pts,tenure_quarter,enrollment_month
FROM HIST_TRIANGLE

OPEN cursor_main
FETCH NEXT FROM cursor_main
INTO @account,@r_month,@e_month,@tenure_month,@min_pts,@expired_pts,@closed_pts,@tenure_quarter,@enrollment_month

DECLARE cursor_secondary CURSOR SCROLL FOR
SELECT Member_ID,redeemed_month,activity_month,min_pts,expired_pts,closed_pts
FROM HIST_TRIANGLE

PRINT 'OK'

OPEN cursor_secondary
FETCH NEXT FROM cursor_secondary
INTO @account2,@r_month2,@e_month2,@min_pts2,@expired_pts2,@closed_pts2

PRINT 'CODE DOES NOT REACH HERE'

...

Bunch more code 

2 个答案:

答案 0 :(得分:0)

第一次通过...尝试放置一个' BEGIN'在' AS'之后并添加' END'在收集更多代码之后......可能就是您所需要的全部代码。

答案 1 :(得分:0)

请在声明光标时放置光标类型。因为您声明的游标可能采用静态只读类型作为默认值。

请查看以下链接了解更多详情: Default type of SQL Server Cursor