
Instruction PRINT dans Sql Server – Bien choisir son serveur d impression
Dans SQL Server, l’instruction PRINT peut être utilisée pour renvoyer un message au client. Il prend une expression de chaîne en entrée et retourne une chaîne en tant que message à l'application. Dans le cas de SSMS, la sortie de l'instruction PRINT est renvoyée dans la fenêtre Messages et, dans le cas d'applications, la sortie de l'instruction PRINT est renvoyée sous forme de message d'erreur informatif à l'application cliente.
Fondamentalement, nous utilisons l'instruction PRINT pour résoudre le code en affichant le message ou en affichant une valeur de variable, etc.
Laissez-nous comprendre la déclaration PRINT avec une longue liste d'exemples
Sommaire
Exemple 1: instruction PRINT imprimant / renvoyant un littéral de chaîne
IMPRIMER 'Bonjour tout le monde!'
RÉSULTAT:
Le résultat ci-dessus montre que, dans le cas de Sql Server Management Studio, la sortie de l'instruction PRINT est renvoyée à l'onglet Messages.
[ALSO READ] Les messages d'instruction PRINT / SELECT au sein de WHILE LOOP ou BATCH de l'instruction ne sont pas affichés immédiatement après son exécution. Sql Server
Exemple 2: instruction PRINT imprimant une valeur de variable Sql Server
DECLARE @WelcomeMsg VARCHAR (100) = 'Bonjour tout le monde!' IMPRIMER @WelcomeMsg
RÉSULTAT:
Exemple 3: instruction PRINT imprimant une sortie de fonction
Imprimons la fonction intégrée GETDATE () valeur de retour
IMPRIMER GETDATE ()
RÉSULTAT:
Type de données d'entrée et de retour d'instruction PRINT
L'entrée dans l'instruction PRINT peut être de type de données CHAR, NCHAR, VARCHAR ou NVARCHAR. Si l'entrée qui lui est transmise est autre que ces types de données spécifiés, il essaie de la convertir implicitement en l'un de ces types de données. Et si l'entrée est de type VARCHAR (MAX) ou NVARCHAR (MAX), elle est tronquée aux types de données VARCHAR (8000) ou NVARCHAR (4000). Le type de retour de l'instruction PRINT est VARCHAR ou NVARCHAR, selon le type de l'entrée.
Exemple 4: Conversion de type de données implicite et explicite dans une instruction PRINT
Comme expliqué ci-dessus, l'instruction PRINT attend une entrée de chaîne. Si un autre type de données est transmis, il essaiera d'effectuer la conversion implicite du type de données. Laissez-nous comprendre cela avec quelques exemples:
Exemple 4.1: instruction PRINT affichant la valeur d'une variable entière
DÉCLARE @ I INT = 100 IMPRIMER @I
RÉSULTAT:
Le résultat ci-dessus montre que la valeur de la variable entière transmise à l'instruction PRINT est convertie de manière implicite.
Exemple 4.2: Valeur de la variable de type XML d'impression des instructions PRINT
DECLARE @value XML = '' PRINT @value
RÉSULTAT:
Msg 257, niveau 16, état 3, ligne 2
La conversion implicite du type de données xml en nvarchar n'est pas autorisée. Utilisez la fonction CONVERT pour exécuter cette requête.
Le résultat ci-dessus montre que la conversion implicite des variables de type XML en type NVARCHAR a échoué. Pour résoudre ce problème, nous pouvons convertir explicitement le type XML en VarChar et passer à l'instruction PRINT.
DECLARE @value XML = '' PRINT CAST (@value AS VARCHAR (50))
RÉSULTAT:
D'après le résultat ci-dessus, il est clair que l'entrée dans l'instruction PRINT doit être de type de données CHAR, NCHAR, VARCHAR ou NVARCHAR. Si l'entrée qui lui est transmise est autre que ces types de données spécifiés, il essaie de la convertir implicitement en l'un de ces types de données.
Exemple 5: Instruction PRINT imprimant le résultat concaténé de la valeur littérale de chaîne et de la valeur de variable entière
DÉCLARE @ I INT = 100 IMPRIMER 'Numéro actuel:' + @I
RÉSULTAT:
Msg 245, Niveau 16, Etat 1, Ligne 2
La conversion a échoué lors de la conversion de la valeur varchar ‘Current Number:’ en type de données int.
Le résultat ci-dessus montre que, dans ce cas, Sql Server tente de convertir la valeur littérale de chaîne ‘Current Number:’ en un type entier (c’est-à-dire que le type de la variable @I), car celui-ci a une priorité plus élevée que le type VarChar.
Pour résoudre ce problème, nous pouvons convertir explicitement la valeur de la variable entière @I en type VARCHAR, comme indiqué ci-dessous, en utilisant l'instruction CAST:
DÉCLARE @ I INT = 100 PRINT 'Numéro actuel:' + CAST (@I AS VARCHAR (10))
RÉSULTAT:
Dans Sql Server 2012, nous avons la fonction CONCAT qui se charge de convertir l’entrée au format correct, puis de concaténer et de renvoyer une sortie de chaîne. Nous pouvons réécrire le script ci-dessus en utilisant la fonction CONCAT comme ci-dessous:
DÉCLARE @ I INT = 100 IMPRIMER CONCAT ('Numéro actuel:', @ I)
RÉSULTAT:
Exemple 6: NULL dans l'instruction PRINT
Exemple 6.1: NULL en tant qu'entrée dans l'instruction PRINT
IMPRIMER NULL
RÉSULTAT:
Le résultat ci-dessus montre que l’instruction PRINT n’imprime pas la valeur NULL.
Exemple 6.2: Instruction PRINT avec une expression chaîne qui est une concaténation de littéral chaîne et une variable dont la valeur est NULL
DÉCLARE @Name NVarChar (50) IMPRIMER 'Bienvenue' + @Nom
RÉSULTAT:
Le résultat ci-dessus montre que l’instruction PRINT n’affiche aucune valeur, car la concaténation du littéral chaîne «Welcome» et de la variable @Name dont la valeur est NULL (car elle n’a pas été initialisée) a pour résultat NULL.
Comment lire une instruction PRINT dans le code .NET
La sortie de l'instruction PRINT est renvoyée sous forme de message d'erreur d'information à l'application cliente. Il n'est pas renvoyé en tant qu'exception régulière. Il est renvoyé sous forme de message d'erreur d'informations avec une gravité inférieure ou égale à 10. Pour lire les messages d'informations renvoyés par l'instruction PRINT ou l'instruction RAISERROR avec une gravité inférieure ou égale à 10, nous pouvons ajouter Méthode déléguée du gestionnaire d'événements à l'événement InfoMessage de l'objet de connexion dans le code ADO.NET C #
SqlConnection conn = new SqlConnection (ConnectionString); conn.InfoMessage + = new SqlInfoMessageEventHandler (ProcessInformationalMessage);
Et ci-dessous se trouve l'exemple de code de la méthode Delegate ProcessInformationalMessage qui écrit la sortie de l'instruction PRINT sur la console:
protégé Void statique ProcessInformationalMessage ( expéditeur de l'objet, arguments SqlInfoMessageEventArgs) foreach (erreur SqlError dans args.Errors) Console.WriteLine ('Numéro d'erreur 0, Ligne d'erreur 1, Message d'erreur 2', err.Number, err.LineNumber, err.Message);
Dans une procédure stockée ou un script long, si vous avez ajouté plusieurs instructions PRINT pour connaître la progression de l'exécution du script. Ensuite, à votre grande surprise, vous ne verrez généralement pas ces messages avant la fin de l'exécution de la procédure. La raison est que le serveur SQL met en mémoire tampon la sortie de l'instruction PRINT et l'envoie au client une fois que la taille du paquet TDS est de 4 Ko. Si vous souhaitez envoyer instantanément la sortie de l'instruction PRINT au client, vous pouvez utiliser l'instruction RAISERROR avec NO WAIT, comme expliqué dans l'article ci-dessous:
Les messages d'instruction PRINT / SELECT au sein de WHILE LOOP ou BATCH de l'instruction ne sont pas affichés immédiatement après son exécution. Sql Server
Commentaires
Laisser un commentaire