带有名称的光标 ...已存在 - SQL Server 2008

2022-09-05 00:12:47

我有一个触发器,用于在对表进行更改时执行一些审核任务。在此触发器中有一个 WHILE 循环,在该循环中有一个游标,该游标在循环的下一次迭代之前被声明、使用、关闭,然后解除分配。

当我调用更改表并进而使触发器运行的存储过程时,并且我从管理工作室中执行此操作,则一切都按预期工作。

但是,当从我的Java Web应用程序中调用此存储过程时,我收到一个错误:“带有名称的游标...已经存在”。

为什么当我手动执行此存储过程时,此存储过程可以工作,而从 Web 应用程序运行时则不起作用,这有什么原因吗?


答案 1

听起来您可能正在使用全局游标,这可能会导致此类问题。

如果必须使用游标:

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

DECLARE yourcursor CURSOR LOCAL ...

答案 2

你也可以试试这个

IF CURSOR_STATUS('global', 'Cursorname') >= -1
BEGIN
    CLOSE Cursorname
    DEALLOCATE Cursorname
END

推荐