トピックのように。 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
このように、カーソルをスクロールとして宣言する必要があります
declare c scroll cursor for (select statement);
その後、いつでも最初の場所を見つけるには、次のようにしてください
fetch first from c;
カーソルのタイプを変更することを強制しない、使用できる別のオプションは、単純に close カーソルを使用してre --- open を使用することです。
CLOSE user_cursor
OPEN user_cursor
ただし、 scroll
option は、受け入れ可能な変更であれば、リソースの使用量の点で安価になります。
カーソルによって取得されたデータは変更されません。
静的
カーソルが使用するデータの一時的なコピーを作成するカーソルを定義します。カーソルへのすべての要求は、tempdbのこの一時テーブルから応答されます。したがって、ベーステーブルに対して行われた変更は、このカーソルに対して行われたフェッチによって返されるデータには反映されず、このカーソルは変更を許可しません。