Pourquoi l'instruction PRINT dans T-SQL semble-t-elle ne fonctionner que parfois? Quelles sont les contraintes d'utilisation? Il semble parfois que si un jeu de résultats est généré, il devient une fonction nulle. Je suppose que cela empêche de corrompre le jeu de résultats, mais sa sortie pourrait-elle ne pas sortir dans un autre jeu de résultats, tel que le nombre de lignes?
Réponses
Trop de publicités?Donc, si vous avez une déclaration à quelque chose comme ce qui suit, vous êtes en train de dire que vous n'obtenez pas de "print" résultat?
sélectionnez * à partir de sysobjects PRINT "Juste sélectionnés * provenant de sysobjects"
Si vous utilisez l'Analyseur de Requêtes SQL, vous verrez qu'il y a deux onglets au bas, celui de "Messages", et c'est là où "l'impression" que les états vont se présenter.
Si vous êtes inquiet au sujet de la synchronisation de voir les instructions d'impression, vous pouvez essayer d'utiliser quelque chose comme
raiserror ('Mon Instruction Print', 10,1) avec nowait
Cela vous donnera immédiatement le message que la déclaration est atteint, plutôt que la mise en mémoire tampon de sortie, comme l'Analyseur de Requêtes fera sous la plupart des conditions.
L'Analyseur de requêtes tampons de messages. L'IMPRESSION et RAISERROR à la fois d'utiliser cette mémoire tampon, mais l'instruction RAISERROR a un AVEC option NOWAIT. Pour imprimer immédiatement un message, utilisez la commande suivante:
RAISERROR ('Your message', 0, 1) WITH NOWAIT
RAISERROR affichera uniquement les 400 caractères de votre message et utilise une syntaxe proche du C fonction printf pour la mise en forme de texte.
Veuillez noter que l'utilisation de l'instruction RAISERROR avec la AVEC NOWAIT option de vidage de la mémoire tampon de message, de sorte que tous déjà tampon de l'information sera de sortie également.
Je me suis récemment heurté à cela, et c'est parce que j'avais une déclaration de conversion sur une variable nulle. Etant donné que cela causait des erreurs, l’instruction d’impression entière affichait la valeur null et n’imprimait pas du tout.
Exemple - Cela échouera:
declare @myID int=null
print 'First Statement: ' + convert(varchar(4), @myID)
Exemple - Ceci imprimera:
declare @myID int=null
print 'Second Statement: ' + coalesce(Convert(varchar(4), @myID),'@myID is null')
Pour le bénéfice de tous ceux qui liront cette question et qui manquent en réalité des instructions d'impression dans leur sortie, il existe en fait des cas où l'impression est exécutée mais n'est pas renvoyée au client. Je ne peux pas vous dire précisément ce qu'ils sont. Je peux vous dire que si vous mettez une instruction go immédiatement avant et après toute instruction print, vous la verrez si elle est exécutée.