web-dev-qa-db-ja.com

カーソルの位置を最初にリセットできますか?

トピックのように。 Transact-SQLでカーソルの位置を最初にリセットして、テーブルで再度実行できるようにすることはできますか?次のコンテキストでリセットしたい:

DECLARE @userID INT
DECLARE user_cursor CURSOR FOR SELECT userID FROM users

WHILE /* some condition */
BEGIN
...

    FETCH NEXT FROM user_cursor INTO @userID

    IF @@FETCH_STATUS = 0
    BEGIN
        /*... here goes the reset of the cursor ...*/
    END

...
END
19
Oskar Szura

このように、カーソルをスクロールとして宣言する必要があります

declare c scroll cursor for (select statement); 

その後、いつでも最初の場所を見つけるには、次のようにしてください

fetch first from c;
29
user2511414

カーソルのタイプを変更することを強制しない、使用できる別のオプションは、単純に close カーソルを使用してre --- open を使用することです。

CLOSE user_cursor
OPEN user_cursor

ただし、 scroll option は、受け入れ可能な変更であれば、リソースの使用量の点で安価になります。

13

カーソルによって取得されたデータは変更されません。

静的

カーソルが使用するデータの一時的なコピーを作成するカーソルを定義します。カーソルへのすべての要求は、tempdbのこの一時テーブルから応答されます。したがって、ベーステーブルに対して行われた変更は、このカーソルに対して行われたフェッチによって返されるデータには反映されず、このカーソルは変更を許可しません。

1
bgs