2011-05-02 1 views
1

@sqlQuery変数を使用して動的コマンドを作成したいとします。また、カーソルを宣言しました(例:@myCursor)。どうすれば "@myCursor = CURSOR FOR @sqlQuery"を設定できますか?私が指摘した構文は機能しません。私はあなたがsp_executesqlを使用してそれを行うことができますThe Curse and Blessings of Dynamic SQLストアドプロシージャで動的に作成されたSQLクエリにカーソルを設定する方法

+0

これは非常に多くのことが間違っています... – JNK

+0

または、お好みの方法でカーソルを使用できませんでした。カーソルはSQL Serverのパフォーマンスにとって非常に悪く、決して技術の最初の選択ではありません。私の個人的な経験では、すべてのカーソルの95%のようなものを、セットベースのコードに置き換えることができます。それを完全にテストすることは不可能であるため、動的に行うことはさらに悪化します。 – HLGEM

答えて

2

を使用しています。動的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 
+0

http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them – HLGEM

1

を見てみる必要があるSQL 2000

関連する問題