48 votes

Comment vérifier si le curseur existe (état ouvert)

Comment vérifier si un curseur est ouvert ou non ? Parce que plusieurs fois, je rencontre l'erreur "Le curseur existe déjà". S'il vous plaît laissez-moi savoir comment puis-je vérifier si un curseur est déjà en statut ouvert.

En fait, je l'ai fermé et désalloué à la fin (CLOSE ppm_cursor; DEALLOCATE ppm_cursor;) Mais j'obtiens toujours la même erreur, quelle pourrait en être la raison.

97voto

Gary W Points 1001

Vous pouvez utiliser la fonction CURSOR_STATUS pour déterminer son état.

 IF CURSOR_STATUS('global','myCursor')>=-1
BEGIN
 DEALLOCATE myCursor
END

46voto

Prateek Points 1074

Fermez le curseur, s'il est vide alors désallouez-le :

 IF CURSOR_STATUS('global','myCursor') >= -1
 BEGIN
  IF CURSOR_STATUS('global','myCursor') > -1
   BEGIN
    CLOSE myCursor
   END
 DEALLOCATE myCursor
END

5voto

Muhammad Omar Points 1204

Juste un petit changement par rapport à ce que Gary W a mentionné, en ajoutant 'SELECT' :

 IF (SELECT CURSOR_STATUS('global','myCursor')) >= -1
BEGIN
 DEALLOCATE myCursor
END

http://social.msdn.microsoft.com/Forums/en/sqlgetstarted/thread/eb268010-75fd-4c04-9fe8-0bc33ccf9357

0voto

Aaron Points 288

Cela m'est arrivé lorsqu'une procédure stockée exécutée dans SSMS a rencontré une erreur pendant la boucle, alors que le curseur était utilisé pour parcourir les enregistrements et avant sa fermeture. Pour y remédier, j'ai ajouté du code supplémentaire dans le bloc CATCH pour fermer le curseur s'il est toujours ouvert (en utilisant CURSOR_STATUS comme le suggèrent d'autres réponses ici).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X