J'ai un curseur SQL Server. Je veux sauter une itération de la boucle lorsqu'une condition spécifique se produit. La pause vous emmène hors de la boucle du curseur et continuez pas à ne rien faire. p>
Y a-t-il une commande qui dit "hey cet enregistrement n'est pas bon alors laissez-le aller de l'avant et de le traverser sur le suivant". P>
Au fait, je sais que les curseurs sont diaboliques comme des pilotes qui vont 43 mph dans la voie de passage, mais aussi souvent dans des logiciels, je suis bloqué. p>
merci p>
5 Réponses :
Il pourrait être plus facile de répondre à cela si nous savions ce que le code du curseur ressemblait. Peut-être que vous pouvez mettre dans une instruction IF qui vérifie la condition et ne fait que quelque chose si la condition n'est pas présente. P>
Si vous codez votre boucle avec la récupération en bas (avec la récupération initiale avant que la boucle), continuez simplement vous sauter au sommet, et transformez la même ligne à nouveau. Vous pouvez utiliser un goto pour passer à la partie de récupération en bas ou restructurer la boucle pour aller chercher en haut et la focalisation fonctionnera.
Vous pouvez modifier votre boucle pour utiliser GOTO ... P>
DECLARE <cursor_name> CURSOR FOR
SELECT
FROM
WHERE
FOR READ ONLY
--populate and allocate resources to the cursor
OPEN <cursor_name>
--process each row
WHILE 1=1
BEGIN
FETCH NEXT FROM <cursor_name>
INTO @a, @b, @c
--finished fetching all rows?
IF @@FETCH_STATUS <> 0
BEGIN --YES, all done fetching
--exit the loop
BREAK
END --IF finished fetching
--do something here--
--do something here--
IF <your condition>
BEGIN
CONTINUE -- fetch next row
END
--do something here--
--do something here--
END --WHILE
--close and free the cursor's resources
CLOSE <cursor_name>
DEALLOCATE <cursor_name>
La déclaration GOTO a beaucoup aidé. Merci.
Pourquoi n'utilisez-vous pas simplement une instruction IF:
IF 'condition exists that I want to update' BEGIN .... END Fetch Next
La réponse bon marché consiste à insérer un bloc If: Commencez la boucle / si la ligne est bonne ... boucle finale / fin. p>
Je n'ai jamais trouvé de curseur SQL, je ne pouvais pas enlever avec une petite pensée et les gains de performance sont généralement énormes. Y a-t-il une raison pour laquelle vous ne pouvez pas sélectionner que les lignes que vous souhaitez utiliser sur, plutôt que de faire une rangée par traitement de ligne? P>