11

カーソルを使用しています。

DECLARE @column1 NVARCHAR(MAX);

DECLARE cursor_name CURSOR FOR
    SELECT c1
    FROM   table_name;

OPEN cursor_name;
FETCH cursor_name INTO @column1;

WHILE @@FETCH_STATUS = 0
BEGIN

    FETCH cursor_name INTO @column1;
END

CLOSE cursor_name;
DEALLOCATE cursor_name;

ここで私の質問は、cursor_name使用後に cursor の定義を変更できますか? 私は次のようなことを意味します:

DECLARE cursor_name CURSOR FOR
    SELECT c2
    FROM   table_name2;

同じカーソル名を使用していますcursor_nameが、定義が変更されています。これが可能な場合、これを行う方法は?

ありがとう。

4

2 に答える 2

12

はい、可能ですが、DEALLOCATE の後である必要があります。これを試してみましたが、うまくいきませんか?

また、カーソルが本当に必要かどうかを確認することもできます。それらはパフォーマンスを低下させ、それらを使用する SQL は多くの場合、それらなしで書き直すことができます。

その方法については、この記事を参照してください。カーソルを宣言するために、あまり一般的ではない DECLARE/SET 構文を使用します (少なくとも私の世界では一般的ではありません)。彼らが提供する例は次のとおりです。

USE pubs
GO
DECLARE @MyCursor CURSOR
SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM titles

DEALLOCATE @MyCursor

SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM sales
GO
于 2011-03-01T20:46:42.143 に答える
5

純粋に技術的な観点から、カーソルが必要かどうかの議論を避けて、カーソルが閉じられ、割り当てが解除されたら、自由に名前を再利用できます。

于 2011-03-01T20:45:45.987 に答える