在循环中调用光标

时间:2011-11-03 07:14:06

标签: sql-server-2008 database-cursor

我创建了一个程序(p1)。此过程打开游标(c1)。我在循环中为每行游标调用另一个过程(p2)。程序需要22秒到120秒。 在过程P1中,我打开,关闭并释放光标c1。这很好。

现在程序P1有一个输入。所以,我用光标(c2)编写了另一个程序(p3)。 光标c2获取p1的输入。现在C2的行数是1403.所以我从P1调用P1,1403次。 这会产生错误:

  

错误:光标试图打开C1,已经打开。

据我所知,Sql server尝试同时为C2中的许多行运行P1。由于C1已经打开,因此出现错误。

任何想法,我如何限制P3一次执行P1。

1 个答案:

答案 0 :(得分:2)

你如何在P1中声明光标C1?它是LOCAL还是GLOBAL游标? LOCAL游标应该能够被声明多次,因为它只在单个过程的范围内使用。

DECLARE customerCursor LOCAL

如果没有为游标定义GLOBAL / LOCAL,它将使用数据库默认值(来自CURSOR_DEFAULT),它以GLOBAL开头。

如果上述方法无效,是否可以查看程序的简化版本以便于测试?

此致 中号