web-dev-qa-db-fra.com

Puis-je réinitialiser la position du curseur au début?

Comme dans le sujet. Puis-je simplement réinitialiser la position du curseur au début dans Transact-SQL, afin qu'il puisse s'exécuter à nouveau sur la table? Je veux le réinitialiser dans le contexte suivant:

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

vous devez déclarer votre curseur comme défilement, comme ceci

declare c scroll cursor for (select statement); 

puis à tout moment pour localiser le premier, utilisez simplement ce qui suit

fetch first from c;
29
user2511414

Une autre option utilisable qui ne vous oblige pas à changer le type de curseur est simplement de fermer le curseur et de ré - ouvrir le:

CLOSE user_cursor
OPEN user_cursor

Mais l'option scroll sera moins chère en termes d'utilisation des ressources, si c'est un changement que vous pouvez accepter.

13

Les données récupérées par le curseur ne changeront pas.

STATIQUE

Définit un curseur qui crée une copie temporaire des données à utiliser par le curseur. Toutes les demandes adressées au curseur sont traitées à partir de cette table temporaire dans tempdb; par conséquent, les modifications apportées aux tables de base ne sont pas reflétées dans les données renvoyées par les récupérations effectuées sur ce curseur, et ce curseur ne permet pas de modifications.

1
bgs