149 votes

Comment puis-je obtenir le numéro de ligne de procédure stockée réel à partir d'un message d'erreur?

Lorsque j'utilise Sql Server et qu'il y a une erreur, le message d'erreur indique un numéro de ligne sans corrélation avec les numéros de ligne de la procédure stockée. Je suppose que la différence est due aux espaces et aux commentaires, mais est-ce vraiment?

Comment puis-je relier ces deux séries de numéros de ligne? Si quelqu'un pouvait me donner au moins un pointeur dans la bonne direction, je l'apprécierais vraiment.

J'utilise SQL Server 2005.

TIA!

142voto

Rick Points 1582

Autant que je me souvienne, il commence à compter les lignes à partir du début du lot à l'origine du proc. Cela signifie que le début du script, ou encore le dernier "ALLER" déclaration avant de la créer/modifier proc déclaration.

Un moyen plus facile de voir qui est de retirer le texte que le Serveur SQL utilisé lors de la création de l'objet. Commutateur de sortie en mode texte (CTRL-T avec la clé par défaut mappings) et l'exécuter

sp_helptext proc_name

Copier coller les résultats dans une fenêtre de script pour obtenir la coloration syntaxique, etc, et l'utilisation de la ligne goto fonction (CTRL-G je crois) pour aller à la ligne d'erreur signalés.

7voto

user2294834 Points 11

En fait, ce Error_number() fonctionne très bien.

Cette fonction démarre les comptes à partir de la dernière instruction GO (séparateur de lots). Par conséquent, si vous n'avez pas utilisé d'espaces Go et qu'elle affiche toujours un numéro de ligne incorrect, ajoutez-y 7, comme dans la procédure stockée de la ligne 7, le séparateur de lots. est utilisé automatiquement. Donc, si vous utilisez Cast (Numéro_Erreur () + 7 en tant que Int) en tant que [Numéro_Erreur] - vous obtiendrez la réponse souhaitée.

4voto

HAJJAJ Points 966

tu peux utiliser ça

 CAST(ERROR_LINE() AS VARCHAR(50))
 

et si vous voulez créer une table de journal des erreurs, vous pouvez utiliser ceci:

 INSERT INTO dbo.tbname( Source, Message) VALUES ( ERROR_PROCEDURE(), '[ ERROR_SEVERITY : ' + CAST(ERROR_SEVERITY() AS VARCHAR(50)) + ' ] ' + '[ ERROR_STATE : ' + CAST(ERROR_STATE() AS VARCHAR(50)) + ' ] ' + '[ ERROR_PROCEDURE : ' + CAST(ERROR_PROCEDURE() AS VARCHAR(50)) + ' ] ' + '[ ERROR_NUMBER : ' + CAST(ERROR_NUMBER() AS VARCHAR(50)) + ' ] ' +  '[ ERROR_LINE : ' + CAST(ERROR_LINE() AS VARCHAR(50)) + ' ] ' + ERROR_MESSAGE())
 

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