serveur sql – Comment déboguer des procédures stockées avec des instructions d'impression? – Bien choisir son serveur d impression
Author: Titanfall —
Short summary: [bzkshopping keyword= »Minecraft » count= »8″ template= »grid »] Avant d'en arriver à ma réponse réitérée; J'avoue que la seule réponse que j'accepterais ici est celle de KM. au dessus de. J'ai voté contre les autres réponses parce qu'aucune d'entre elles n'a répondu à la question posée ou qu'elles n'étaient pas adéquates. La sortie PRINT apparaît effectivement dans la fenêtre […]
Quick overview
- Site
- Tutos GameServer
- Canonical URL
- https://tutos-gameserver.fr/2021/02/05/serveur-sql-comment-deboguer-des-procedures-stockees-avec-des-instructions-dimpression-bien-choisir-son-serveur-d-impression/
- LLM HTML version
- https://tutos-gameserver.fr/2021/02/05/serveur-sql-comment-deboguer-des-procedures-stockees-avec-des-instructions-dimpression-bien-choisir-son-serveur-d-impression/llm
- LLM JSON version
- https://tutos-gameserver.fr/2021/02/05/serveur-sql-comment-deboguer-des-procedures-stockees-avec-des-instructions-dimpression-bien-choisir-son-serveur-d-impression/llm.json
- Manifest
- https://tutos-gameserver.fr/llm-endpoints-manifest.json
- Estimated reading time
- 4 minutes (222 seconds)
- Word count
- 738
Key points
- [bzkshopping keyword= »Minecraft » count= »8″ template= »grid »] Avant d'en arriver à ma réponse réitérée; J'avoue que la seule réponse que j'accepterais ici est celle de KM.
- au dessus de.
- J'ai voté contre les autres réponses parce qu'aucune d'entre elles n'a répondu à la question posée ou qu'elles n'étaient pas adéquates.
- La sortie PRINT apparaît effectivement dans la fenêtre Message, mais ce n'est pas du tout ce qui a été demandé.
Primary visual
Structured content
[bzkshopping keyword= »Minecraft » count= »8″ template= »grid »]
Avant d'en arriver à ma réponse réitérée; J'avoue que la seule réponse que j'accepterais ici est celle de KM. au dessus de. J'ai voté contre les autres réponses parce qu'aucune d'entre elles n'a répondu à la question posée ou qu'elles n'étaient pas adéquates. La sortie PRINT apparaît effectivement dans la fenêtre Message, mais ce n'est pas du tout ce qui a été demandé. Pourquoi la sortie de l'instruction PRINT ne s'affiche-t-elle pas pendant l'exécution de ma procédure stockée?La version courte de cette réponse est que vous envoyez l'exécution de votre sproc au serveur SQL et il ne répondra pas tant qu'il n'aura pas terminé la transaction entière. Voici une meilleure réponse située sur ce lien externe.
Pour encore plus d'opinions / observations, concentrez votre attention sur cet article SO ici. Regardez plus précisément cette réponse du même post par Phil_factor (Ha ha! Love the SQL humour) En ce qui concerne la suggestion d'utiliser RAISERROR WITH NOWAIT, regardez cette réponse du même message par JimCarden
Ne fais pas ces choses
Certaines personnes ont l'impression qu'elles peuvent simplement utiliser une instruction GO après leur instruction PRINT, mais vous NE POUVEZ PAS utiliser l'instruction GO INSIDE d'un sproc. Donc, cette solution est sortie. Je ne recommande pas SELECT-ing vos instructions d'impression car cela va juste brouiller votre jeu de résultats avec des absurdités et si votre sproc est censé être consommé par un programme plus tard, vous devrez savoir quels jeux de résultats ignorer lors de la boucle à travers les résultats de votre lecteur de données. C'est juste une mauvaise idée, alors ne le faites pas. Un autre problème avec SELECT-ING vos instructions d'impression est qu'elles n'apparaissent pas toujours immédiatement. J'ai eu différentes expériences avec cela pour différentes exécutions, alors ne vous attendez pas à une quelconque cohérence avec cette méthodologie.
Alternative à IMPRIMER à l'intérieur d'une procédure stockéeÀ mon avis, c'est vraiment une sorte de travail dégoûtant parce que la syntaxe est déroutante dans le contexte dans lequel elle est utilisée, mais qui sait peut-être qu'elle sera mise à jour à l'avenir par Microsoft. Je n'aime tout simplement pas l'idée de générer une erreur dans le seul but d'imprimer les informations de débogage …
Il semble que le seul moyen de contourner ce problème est d'utiliser, comme cela a déjà été expliqué à plusieurs reprises, RAISERROR WITH NOWAIT. Je donne un exemple et souligne un petit problème avec cette approche: MODIFIER --CRÉER PROCÉDURE [dbo].[PrintVsRaiseErrorSprocExample] COMME COMMENCER SET NOCOUNT ON;
- Cela imprimera immédiatement RAISERROR ('RE Start', 0, 1) AVEC NOWAIT SELECT 1;
- Délai de cinq secondes pour simuler une exécution longue RETARD D'ATTENTE '00: 00: 05 '
- Cela s'imprimera après le délai de cinq secondes RAISERROR ('RE End', 0, 1) AVEC NOWAIT SELECT 2; FIN
ALLER
EXEC [dbo].[PrintVsRaiseErrorSprocExample]
Les deux résultats de l'instruction SELECT ne s'afficheront qu'une fois l'exécution terminée et le impression les instructions s'afficheront dans l'ordre indiqué ci-dessus. Problème potentiel avec cette approcheSupposons que vous ayez à la fois votre instruction PRINT et votre instruction RAISERROR l'une après l'autre, puis elles s'impriment toutes les deux. Je suis sûr que cela a quelque chose à voir avec la mise en mémoire tampon, mais sachez simplement que cela peut arriver. MODIFIER --CRÉER PROCÉDURE [dbo].[PrintVsRaiseErrorSprocExample2] COMME COMMENCER SET NOCOUNT ON;
- Les instructions PRINT et RAISERROR afficheront IMPRIMER 'P Démarrer'; RAISERROR ('RE Start', 0, 1) AVEC NOWAIT SELECT 1;
RETARD D'ATTENTE '00: 00: 05 '
- Les instructions PRINT et RAISERROR afficheront IMPRIMER 'P Fin' RAISERROR ('RE End', 0, 1) AVEC NOWAIT SELECT 2; FIN
ALLER
EXEC [dbo].[PrintVsRaiseErrorSprocExample2]
Par conséquent, le travail ici est, n'utilisez pas à la fois PRINT et RAISERROR, choisissez simplement l'un sur l'autre. Si vous voulez que votre sortie s'affiche pendant l'exécution d'un sproc, utilisez RAISERROR WITH NOWAIT.
Click to rate this post! [Total: 0 Average: 0]
Topics and keywords
Themes: Serveur d'impression
License & attribution
License: CC BY-ND 4.0.
Attribution required: yes.
Manifest: https://tutos-gameserver.fr/llm-endpoints-manifest.json
LLM Endpoints plugin version 1.1.2.