2011-05-02 19 views
1

我想使用@sqlQuery變量創建動態命令。我還聲明瞭一個遊標(例如:@myCursor)。我怎樣才能「SET @myCursor = CURSOR FOR @sqlQuery」。我剛剛提到的語法不起作用。我使用SQL 2000如何在存儲過程中將光標設置爲動態創建的SQL查詢

+0

很多事情都是錯誤的...... – JNK 2011-05-02 14:53:32

+0

或者你不能使用遊標是首選的方法。遊標對於SQL Server性能來說是非常糟糕的,並且不應該是技術的首選。所有遊標的95%(以我個人經驗)可以用基於集合的代碼替代。動態地做它更糟,因爲它不可能完全測試。 – HLGEM 2011-05-02 19:19:41

回答

1

可以使用sp_executesql做到這一點。只要確保在動態SQL中打開遊標。

CREATE PROCEDURE OpenCursor (@query nvarchar(max), @cur cursor VARYING OUTPUT) 
AS 
    DECLARE @sql nvarchar(max) 
    SET @sql = N'SET @cur = CURSOR STATIC FOR ' + @query + '; OPEN @cur' 
    EXEC sp_executesql @sql, N'@cur cursor OUTPUT', @cur OUTPUT 
GO 

DECLARE @cur cursor 
EXEC OpenCursor 'SELECT * FROM sysobjects', @cur OUTPUT 
FETCH NEXT FROM @cur 
相關問題