Reset @@FETCH_STATUS procédure stockée
Comment puis-je réinitialiser le @@FETCH_STATUS variable ou valeur 0 dans une procédure stockée?
Aussi, pouvez-vous lier FETCH_STATUS à un curseur?
- Pourriez-vous expliquer le pourquoi de ce comportement souhaité? Peut-être que la communauté peut résoudre votre besoin d'une manière différente.
Vous devez vous connecter pour publier un commentaire.
Je suis en mesure de reproduire le
@@FETCH_STATUS
problème que vous décrivez, c'est une fois que vousDECLARE
unCURSOR
et parcourir les lignes en appelantFETCH NEXT
jusqu'à ce que votre@@FETCH_STATUS = -1
.Alors même si vous
CLOSE
etDEALLOCATE
votre curseur, si vous appelez çaCURSOR
arrière de votre@@FETCH_STATUS = -1
et si votre fonder une condition de boucle sur le@@FETCH_STATUS <> -1
, la boucle ne s'exécute jamais.Ma solution a été de essentiellement dire la
CURSOR
pour revenir àFIRST
, la modification de la@@FETCH_STATUS
retour à0
, puis quitter. Prendre note que l'on doit permettre àCURSOR
à défilement en ajoutant le mot-cléSCROLL
après laCURSOR
nom lorsque vous déclarez.Voici un exemple. J'ai utilisé trois colonnes à partir d'une orderitems (objets que les commandes passées de la table pour créer mon curseur:
Ce sont les résultats:
Le curseur peut être courir plus et plus et produit les mêmes résultats à chaque fois.
Vous pouvez le réinitialiser par la lecture d'un curseur qui n'est pas à la fin d'un tableau.
Vous devez fermer le curseur, puis Ouvrir le curseur de nouveau.
Un vieux thread, je sais, mais une réponse que l'on trouve d'ailleurs qui a fonctionné pour moi a été:
Vous ne pouvez pas:
Donc, fondamentalement, il n'est pas lié à un curseur.
Comme Sklivvz écrit vous ne pouvez pas.
Mais je me demande pourquoi voulez-vous réinitialiser?
Quel est le réel problème?
Généralement vous avez un @@FETCH_STATUS immédiatement après une EXTRACTION, alors pourquoi voudriez-vous pour le réinitialiser?
Essayer de stocker le résultat dans une variable temporaire si vous n'avez pas d'évaluer immédiatement.
Si vous voulez briser curseur, Vous pouvez utiliser PAUSE
Mais ce seulement une fonction de remplacement de 0 à 1.
J'ai eu ce que je pensais était un besoin de réinitialiser mon curseur.
J'ai été faire quelques essais avec les curseurs et j'ai gardé de revenir avec un @@fetch_status être = -1, même après que j'avais codé un proche et la libération du curseur de la souris j'ai été le tester.
Ce qui était arrivé, j'avais ouvert un curseur global dans une autre procédure après un test logique et jamais fermé que le curseur à la fin de l'itération à travers elle.
Donc l'Extraction était de voir les @@Fetch_status de ce curseur.
Fermer vos curseurs, de libérer vos curseurs.