名称为...的游标已存在 - SQL Server 2008

t0m*_*m0d 12 java sql t-sql sql-server cursor

我有一个触发器,用于在对表进行更改时执行一些审计任务.在此触发器中有一个WHILE循环,并且在循环中有一个游标,在循环的下一次迭代之前声明,使用,关闭然后释放.

当我调用一个更改表的存储过程然后导致触发器运行时,我从Management Studio中执行此操作,所有操作都按预期工作.

但是,当从我的Java Web应用程序中调用此存储过程时,出现错误:"名称为...的游标已存在".

这个存储过程在我手动执行时是否有效,而在从Web应用程序运行时无效?

Moe*_*sko 30

听起来你可能正在使用GLOBAL游标,这可能会导致这样的问题.

如果必须使用游标:

如果可以,请在所有代码中使用LOCAL游标.例如,使用"LOCAL"关键字声明游标,如下所示:

DECLARE yourcursor CURSOR LOCAL ...
Run Code Online (Sandbox Code Playgroud)


小智 6

你也可以试试这个

IF CURSOR_STATUS('global', 'Cursorname') >= -1
BEGIN
    CLOSE Cursorname
    DEALLOCATE Cursorname
END
Run Code Online (Sandbox Code Playgroud)