Valeur de retour à partir d'une procédure stockée sur erreur
J'ai un sp dans SQL Server que lorsque des erreurs se retourne -4
Ce n'-4 veux dire? Est-il un tableau quelque part à expliquer ce que les valeurs de retour possibles sont?
Il doit y avoir une norme
Par exemple
declare @RetVal int
EXEC @RetVal = stpTest
select @RetVal
où stpTest est "SÉLECTIONNEZ 1/0" renvoie -6.
-6 doit vouloir dire quelque chose!
La sp qui a renvoyé -4 seulement la mise à JOUR et SÉLECTIONNEZ DANS des déclarations en elle.
À aucun moment, ne se", SÉLECTIONNEZ -4' alors, comment puis-je savoir ce que -4 signifie en particulier que la procédure stockée"?
Aussi, si il n'y a pas de norme, alors pourquoi une erreur de division par zéro toujours revenir -6?
Si vous avez une ps qui ne retourne rien, c'est à dire il ne dispose pas d'instructions select de lui et vous ne:
declare @RetVal int
EXEC @RetVal = yourSPName
Puis @RetVal aura une valeur de 0.
Si il y a une erreur alors @RetVal sera une valeur différente de zéro, par exemple, si la seule chose que le ps n'est "SÉLECTIONNEZ 1/0" puis @RetVal sera -6.
L'essayer et voir
Ma question est que faire de ces valeurs de retour signifie? Ils doivent être d'une logique de sens!
- Comme il est indiqué à plusieurs reprises ci-dessous, il n'y a pas de normes. Si vous avez la source de la procédure stockée, essayez de votre niveau de débogage des procédures.
- La version de SQL Server que vous utilisez? Merci d'éditer votre question avec un exemple complet, montrant la procédure stockée, l'exécution et le résultat.
Vous devez vous connecter pour publier un commentaire.
Si vous avez une instruction de RETOUR avec une valeur de retour explicite, c'est bien sûr la valeur de retour.
Mais si il n'y a pas d'instruction RETURN, mais une erreur survient lors de l'exécution, la valeur de retour est de 10 moins le niveau de gravité de l'erreur. La Division par zéro est niveau 16, donc la valeur de retour est -6. Les autorisations d'erreurs sont typiques de niveau 14, donc la valeur de retour est de -4.
Comme vous pouvez le deviner ce n'est pas vraiment utile, mais c': 0 est un succès, et tout le reste est une erreur.
Il n'y a pas de standard pour les codes de retour. Vous aurez à trouver ce que -4 signifie en particulier que la procédure stockée. En fait, pas tous les codes de retour sont des erreurs.
EDIT: le contre-exemple
Exécution:
Résultat:
C'est avec SQL Server 2008.
Certaines recherches suggèrent que ce comportement peut être à gauche à partir de SQL Server 6.0. Si c'est le cas, alors vous pouvez décider pour vous-même comment fiable qu'elle est susceptible d'être, étant donné qu'ils ont arrêté de le documenter (et cessé de garantir son exactitude) il y a si longtemps.
Ma "recherche", avec grâce, à MVP SQL Server Tibor Karaszi. Sa source est la documentation en Ligne de SQL Server 6.5. En vertu de l' ""Contrôle De Flux de la Langue", le RETOUR", il a trouvé
Je pense que la question devrait être édité à poser -
Quelque chose que j'ai trouvé à partir de ce lien http://www.redware.com/handbooks/sql_server_handbook/sql_server_stored_procedures.html
À partir de ce lien - sqlserverpedia.com/wiki/Stored_Procedures_-_Output_Parameters_&_Return_Values
Aussi un autre lien (je suppose) à partir de @Erland Sommarskog http://www.sommarskog.se/error-handling-I.html
Obtenir Des Informations D'Erreur
Aussi, si vous avez besoin de trouver quelle est l'erreur (plutôt que ce -6 moyens), vous pouvez essayer de mettre votre code sql dans un try catch, c'est à dire.
Tout d'abord, merci de prendre la peine de créer un exemple qui renvoie -6.
Voici ce que dit la documentation à propos de -6:
-6 peut-être le plus amorphe code SQL Server renvoie.
Pourquoi? Parce que l'-6 code d'erreur est essentiellement cacher une erreur plus profonde dans la pile d'appel.
Après la résolution de cette erreur moi-même, voici mes conseils pour la résolution de cette erreur:
Je ne suis pas sûr qu'il y a un moyen de savoir ce sans demander à SQL Server devs. C'est quelque chose niveau inférieur à celui enregistré par votre proc d'évaluer ce que vous êtes à l'envoi et à la production de ce code de retour. Sauf si vous avez expressément obtenu un RETOUR -4 dans votre code, il vient de l'analyseur SQL probablement.