2011-11-03 68 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

非常感謝。這個伎倆。 –