2011-11-03 66 views
0

我已经创建了一个过程(p1)。这个过程打开一个光标(c1)。我在循环中为每一行游标调用另一个过程(p2)。程序需要22秒至120秒。 在程序P1中,我打开,关闭并释放游标c1。这工作正常。循环调用光标

现在程序P1有一个输入。所以,我用光标(c2)编写了另一个程序(p3)。 光标c2获取p1的输入。现在C2的行数是1403.所以我给P3打电话1403次。 ,这将创建错误:

Error: Cursor trying to open C1, is already open.

据我所知,SQL Server试图同时在C2许多行运行P1。当C1已经打开时,错误就出现了。

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

回答

2

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

DECLARE customerCursor LOCAL 

如果全局/局部没有为光标所定义,它将使用哪个开始了作为GLOBAL数据库缺省值(从CURSOR_DEFAULT)。

如果上述内容不起作用,是否可以查看简化版本的程序以便于测试?

Regards, M

+0

非常感谢。这个伎俩。 –