Instructions SQL Server PRINT et SQL Server RAISERROR – Serveur d’impression

Cet article explore les instructions SQL Server PRINT et ses autres instructions SQL Server RAISEERROR à imprimer
messages dans une requête.

introduction

Supposons que vous exécutiez une requête en plusieurs étapes. Nous voulons recevoir un message une fois chaque étape terminée. Il permet de suivre la progression de la requête. Habituellement, nous utilisons l'instruction SQL PRINT pour imprimer les messages correspondants ou suivre les valeurs des variables pendant la progression de la requête.

Nous utilisons également des interactions ou plusieurs boucles dans une requête avec un certain temps ou pour une boucle. Nous pouvons également utiliser le SQL PRINT
pour suivre l'itération.

Nous utilisons l'instruction SQL Server PRINT pour renvoyer des messages au client. Nous spécifions le message comme entrée d'expressions de chaîne. SQL Server renvoie le message à l'application.

Dans cet article, nous allons explorer plusieurs cas d'utilisation de l'instruction SQL PRINT, ses limitations et alternatives à SQL
Instructions PRINT.

Exemple 1: instruction SQL Server PRINT pour imprimer une chaîne

C'est l'exemple le plus simple. Exécutez la requête suivante dans SSMS et elle renvoie le message suivant dans la sortie:

Instruction PRINT pour imprimer une chaîne

Dans SSMS, nous obtenons la sortie de l'instruction PRINT dans la fenêtre de message SSMS comme indiqué dans l'image ci-dessus.

Exemple 2: instruction PRINT pour imprimer une valeur de variable

Nous pouvons également utiliser l'instruction SQL PRINT pour imprimer une valeur variable. Définissons un message dans une variable et plus tard
imprimer ce message:

Instruction PRINT pour imprimer une valeur de variable

Exemple 3: instruction SQL Server PRINT pour imprimer une valeur entière

Nous pouvons utiliser l'instruction SQL PRINT pour imprimer une valeur entière, comme indiqué ci-dessous:

Instruction PRINT pour imprimer une valeur entière

Nous pouvons spécifier uniquement les types de données CHAR, NCHAR, VARCHAR ou NVARCHAR dans l'instruction PRINT. Dans ce cas, il convertit implicitement une valeur entière en type de données VARCHAR en interne.

Prenons un autre exemple avec une variable entière et une chaîne dans l'instruction PRINT. Vous obtenez un message d'erreur dans
conversion de type de données car SQL Server tente de convertir le type de données varchar en entier. Dans le type de données
priorité, le type de données entier a une priorité élevée par rapport au type de données varchar:

Message d'échec de conversion

Nous convertissons explicitement le type de données entier en varchar à l'aide de l'instruction SQL CAST:

convertir explicitement le type de données

Nous pouvons également utiliser la fonction SQL CONCAT, et elle effectue automatiquement la conversion du type de données pour nous. Dans ce qui suit
requête, nous obtenons la sortie en utilisant la fonction CONCAT similaire à l'opérateur CAST:

CONCAT SQL

Exemple 4: instruction SQL Server PRINT avec une valeur de variable de type XML

Nous pouvons également utiliser le type de données XML avec l'instruction PRINT, mais cela nécessite une conversion des données.

Comme le montre la sortie suivante, nous ne pouvons pas utiliser directement une variable XML dans l'instruction PRINT. Cela donne une erreur
message indiquant qu'une conversion implicite de XML vers nvarchar n'est pas autorisée:

Instruction PRINT avec une valeur de variable de type XML

Nous pouvons utiliser la fonction SQL CAST ou CONVERT explicitement et obtenir la sortie requise:

Instruction PRINT avec une valeur de variable de type XML

Exemple 5: instruction SQL Server PRINT avec des conditions IF

Utilisons l'instruction PRINT pour imprimer le message satisfait dans la condition IF. Dans cet exemple, la variable @a
contient une chaîne. La condition IF vérifie la chaîne et affiche un message satisfaisant la condition:

Instruction PRINT avec conditions IF

Exemple 6: instruction PRINT avec des valeurs NULL

Nous ne pouvons pas imprimer NULL dans le message à l'aide de l'instruction SQL PRINT. La requête suivante ne renvoie aucun résultat:

    Instruction PRINT avec des valeurs NULL

Utilisons la requête suivante qui contient une variable avec des valeurs NULL. Dans l'instruction PRINT, nous utilisons une chaîne
avec cette variable, et elle ne renvoie aucun message. La concaténation d'une chaîne et de la variable @a
(NULL) qui ne renvoie aucune sortie:

    Instruction PRINT avec des valeurs NULL

Exemple 7: instruction SQL Server PRINT dans une boucle WHILE

Comme indiqué précédemment, plusieurs fois, nous avons besoin de connaître les informations sur chaque itération lors de l'exécution d'une requête dans une boucle telle que WHILE ou FOR.

La requête suivante utilise la boucle WHILE et affiche un message sur chaque itération:

Il donne la sortie suivante. Nous pouvons utiliser une instruction Print avec un message approprié et suivre la progression de la requête.

Instruction PRINT dans une boucle WHILE

Limitations de l'instruction SQL Server PRINT

Dans l'exemple précédent, nous avons vu l'utilisation de cas d'instructions SQL PRINT. Nous avons les limitations suivantes avec
IMPRIMER aussi:

  1. Nous devons utiliser les fonctions CAST, CONVERT ou CONCAT dans l'instruction PRINT avec des variables

  2. Nous ne pouvons pas voir une instruction PRINT dans SQL PROFILER

  3. L'instruction PRINT ne renvoie pas le message immédiatement; il met en tampon la sortie et les affiche

Élaborons le point n ° 3 et voyons ses alternatives.

Exécutez la requête suivante qui contient deux instructions PRINT. En regardant la requête, vous pourriez penser à la sortie dans
le formulaire suivant:

  • Il donne le message de la première instruction PRINT

  • Attend 5 secondes

  • Il donne le message pour une deuxième instruction PRINT

  • Attend encore 5 secondes

Dans l'image GIF suivante, vous pouvez noter qu'il imprime le message des deux instructions SQL PRINT ensemble après 10
secondes:


Instruction PRINT dans une boucle WHILE

Prenons un autre exemple et voyons le comportement de l'instruction PRINT. En cela, nous voulons imprimer le message dès que
l'itération se termine:

Dans la sortie, nous pouvons noter que tous les messages sortis des instructions PRINT apparaissent ensemble une fois l'exécution
se termine. La boucle s'exécute 14 fois et attend 1 seconde à chaque exécution. Par conséquent, nous obtenons une sortie après 14
secondes pour toutes les instructions PRINT:


Instruction PRINT dans une boucle WHILE

SQL Server met en mémoire tampon les messages pour plusieurs instructions PRINT et les affiche ensemble.

Ce n'est pas la sortie souhaitée, et en tout cas, cela peut ne pas être utile car vous ne pouvez pas suivre la progression de la requête dans
temps réel.

Instruction RAISERROR SQL Server

Nous pouvons utiliser une alternative à l'instruction SQL PRINT qui est RAISERROR.

Nous avons besoin de quelques arguments dans les instructions RAISERROR.

  • Message – C'est le message que nous voulons imprimer
  • Gravité – Il s'agit d'un nombre compris entre 0 et 25 et définit la gravité des messages. Il traite
    le message différemment avec chaque gravité. Nous en verrons quelques exemples dans cet article
  • Etat – C'est un nombre compris entre 0 et 255 pour distinguer une erreur d'une autre. C'est bon de
    utilisez la valeur 1 pour cet article

Nous devons utiliser l'instruction RAISERROR avec la clause NOWAIT; sinon, il montre le même comportement que pour SQL PRINT
déclaration:

Dans la sortie suivante avec les instructions SQL Server RAISERROR, nous pouvons noter les éléments suivants:

  • Il donne le message de la première instruction PRINT

  • Attend 5 secondes

  • Il donne le message pour la deuxième instruction PRINT

  • Attend encore 5 secondes


Instruction PRINT dans une boucle WHILE

Auparavant, nous utilisions la gravité 0 dans l'instruction RAISERROR. Utilisons la même requête avec la gravité 16:

Dans la sortie, nous pouvons voir que le message apparaît en rouge, et il montre le message comme une erreur au lieu d'un message normal. Vous obtenez également l'identifiant, le niveau et l'état du message:

Gravité 16 dans SQL Server RAISERROR

Exécutons la requête suivante avec la gravité 1 et la gravité 16. La gravité 1 affiche le message avec des informations supplémentaires, mais il ne l'affiche pas comme une erreur. Vous pouvez voir la couleur du texte en noir.

Un autre SQL Server RAISERROR affiche le message de sortie comme une erreur:

Gravité 16 et 1 dans RAISERROR

Nous ne pouvons pas utiliser SQL Server RAISERROR directement à l'aide des variables. Nous obtenons la sortie suivante qui n'est pas celle souhaitée
production:

Il imprime le message mais n'affiche pas la valeur de la variable:

variable avec RAISERROR

Nous devons utiliser les instructions d'impression de style C avec RAISERROR. La requête suivante montre la variable avec le
RAISERROR. Vous pouvez remarquer que nous utilisons% s et% d pour imprimer une chaîne et une valeur entière:

Nous obtenons la sortie instantanée dans SQL Server RAISERROR avec l'instruction WITH NOWAIT selon nos besoins et ne
ne pas utiliser de tampon pour afficher la sortie une fois la requête terminée:


Instruction PRINT dans une boucle WHILE

Vous pouvez confondre l'instruction RAISERROR avec laquelle elle sert à générer des messages d'erreur dans SQL Server. Nous pouvons également l'utiliser comme alternative à l'instruction SQL PRINT. Habituellement, les développeurs n'utilisent les instructions PRINT que pour envoyer des messages dans une requête. Vous devez explorer les instructions RAISERROR pour vos requêtes, procédures stockées.

Conclusion

Dans cet article, nous avons exploré l'instruction SQL Server PRINT et ses utilisations pour suivre les jalons utiles dans une requête. Nous avons également appris ses limites avec l'instruction alternative RAISERROR de la solution dans SQL Server. serveur SQL
RAISERROR vous offre un grand avantage pour contrôler le comportement du tampon de sortie.

Rajendra Gupta

Rajendra Gupta

Rajendra a plus de 8 ans d'expérience dans l'administration de bases de données, se passionnant pour l'optimisation des performances des bases de données, la surveillance et les technologies de haute disponibilité et de reprise après sinistre, apprenant de nouvelles choses, de nouvelles fonctionnalités.

Tout en travaillant en tant que consultant senior DBA pour les gros clients et en étant certifié MCSA SQL 2012, il aime partager ses connaissances sur différents blogs.
On peut le joindre à [email protected]

Voir tous les articles de Rajendra Gupta

Rajendra Gupta

Derniers articles par Rajendra Gupta (voir tout)

  • Microsoft SQL Server 2012 Standard - 1 Device CAL
    Vous achetez une licence d'accès pour l'extension Microsoft SQL Server 2012 Standard - 1 Device CAL. Ce n'est pas le logiciel serveur mais les licences d'accès!
  • Microsoft SQL Server 2014 Standard - 1 User CAL
    Vous achetez une licence d'accès pour l'extension Microsoft SQL Server 2014 Standard - 1 User CAL. Ce n'est pas le logiciel serveur mais les licences d'accès!
  • Microsoft SQL Server 2014 Standard - 1 Device CAL
    Vous achetez une licence d'accès pour l'extension Microsoft SQL Server 2014 Standard - 1 Device CAL. Ce n'est pas le logiciel serveur mais les licences d'accès!
  • Microsoft SQL Server Standard 2016 - 1 Device CAL
    Vous achetez une licence d'accès pour l'extension Microsoft SQL Server Standard 2016 - 1 Device CAL. Ce n'est pas le logiciel serveur mais les licences d'accès!
  • Microsoft SQL Server 2012 Standard - 1 User CAL
    Vous achetez une licence d'accès pour l'extension Microsoft SQL Server 2012 Standard - 1 User CAL. Ce n'est pas le logiciel serveur mais les licences d'accès!
  • Microsoft SQL Server Standard 2016 - 1 User CAL
    Vous achetez une licence d'accès pour l'extension Microsoft SQL Server Standard 2016 - 1 User CAL. Ce n'est pas le logiciel serveur mais les licences d'accès!
  • Digitus DIGITUS DN-13023 - Ethernet LAN/LAN sans fil - IEEE 802.11n - 10,100
    Outillage ... Divers DIGITUS, Print Server - WLAN - 10,1 Gbps - 128 Bit - FTP - WLAN - Stroke - Print Server - Wireless - USB 2.0 - RJ-45 - Windows Vista