Serveur d'impression

Instruction PRINT dans Sql Server – Bien choisir son serveur d impression

Par Titanfall , le 18 août 2019 - 7 minutes de lecture

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

Exemple 1: instruction PRINT imprimant / renvoyant un littéral de chaîne

IMPRIMER 'Bonjour tout le monde!'

RÉSULTAT:
Sql Server PRINT Example1

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:
Sql Server PRINT Exemple 2

Exemple 3: instruction PRINT imprimant une sortie de fonction

Imprimons la fonction intégrée GETDATE () valeur de retour

IMPRIMER GETDATE ()

RÉSULTAT:
Sql Server PRINT Exemple 3

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:
Sql Server PRINT Example4

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:
Sql Server PRINT Example 4.3

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:
Sql Server PRINT Exemple 5.1

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:
Sql Server PRINT Exemple 5.2

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:
Sql Server PRINT Exemple 5.3

Exemple 6: NULL dans l'instruction PRINT

Exemple 6.1: NULL en tant qu'entrée dans l'instruction PRINT

IMPRIMER NULL

RÉSULTAT:
Sql Server PRINT Exemple 61

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:
Sql Server PRINT Exemple 62

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

Click to rate this post!
[Total: 0 Average: 0]

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.