Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Vue d'ensemble de l'instruction PRINT dans SQL Server

L'instruction SQL PRINT sert à afficher le message défini par l'utilisateur. Par exemple, vous développez un script avec des boucles T-SQL et vous souhaitez afficher un message spécifique à chaque itération d'une boucle. Ensuite, vous pouvez utiliser l'instruction PRINT. Ou, vous pouvez l'utiliser lors du développement d'un script avec des instructions conditionnelles. Dans ce cas, vous vous assurez que la condition évaluée par l'instruction exécute l'étape correcte ou génère la sortie correcte. L'instruction PRINT peut également être utilisée pour suivre le processus d'une requête T-SQL ou d'une procédure stockée ou pour renvoyer le message personnalisé.

L'article actuel se concentre sur les cas d'utilisation suivants :

  1. Imprimer une chaîne ou une valeur int à l'aide de l'instruction PRINT.
  2. Utilisation de PRINT dans l'instruction IF…ELSE.
  3. Utilisation de PRINT dans la boucle WHILE.

La syntaxe de l'instruction PRINT est la suivante :

Print string | @variable | str_expression
  • chaîne  :La valeur peut être un caractère ou une chaîne Unicode.
  • @variable  :Le type de données caractère doit être un type de données caractère ou Unicode.
  • str_expression :la valeur peut être une expression renvoie une chaîne. Il peut s'agir d'une valeur littérale, d'une fonction de chaîne et d'une variable.

Lorsque nous utilisons l'instruction PRINT pour afficher la valeur spécifique, la sortie revient dans le volet des messages du studio SQL Server Management.

Remarque : L'instruction PRINT peut afficher une chaîne de 8 000 caractères ou une chaîne Unicode de 4 000 caractères . Si la longueur dépasse 8000, la chaîne restante sera tronquée.

Limites de l'instruction PRINT

  1. La fonction PRINT renvoie une chaîne de caractères ou une chaîne de caractères UNICODE. Par conséquent, lors de la concaténation des types de données string et Integer, nous devons convertir explicitement la valeur INT en type de données char ou varchar.
  2. Le profileur SQL Server ne capture pas les instructions PRINT.

Exemple :Imprimer la valeur de la chaîne

Supposons que vous vouliez écrire une déclaration qui imprime Hello, World à l'écran. Le T-SQL doit être le suivant :

Print 'Hello World'

Sortie :

Pour imprimer la valeur stockée dans @string variable, nous avons besoin du code suivant :

declare @String varchar(30)
set @String='Hello World'
Print @String

Sortie :

Imprimer une valeur entière à l'aide de l'instruction PRINT

Utilisez le script T-SQL suivant :

Print 10

Sortie :

Pour imprimer la valeur de @intvalue paramètre, utilisez le script T-SQL suivant. Le type de données de @intvalue est un entier.

declare @IntValue Int
set @IntValue = 10
Print @IntValue

Sortie :

Vous pouvez exécuter des fonctions arithmétiques de base à l'aide de l'instruction PRINT. Supposons que vous souhaitiez effectuer la SOMME de deux valeurs. Vous pouvez le faire en ajoutant le signe plus (+) entre deux valeurs numériques :

Print 10+10

Sortie :

Imprimez des messages personnalisés à l'aide de l'instruction PRINT

Supposons que vous souhaitiez imprimer l'heure actuelle à l'aide de l'instruction PRINT. Pour ce faire, nous déclarons deux variables SQL PRINT nommées @inputstring et @currentdate . Le type de données de @inputstring est varchar(50), et @currentdate est dateheure . La requête est la suivante :

declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + @currentdate

Sortie :

Une erreur se produit. Pour corriger cette erreur, nous devons convertir explicitement la valeur stockée dans le @currentdate variable. Le script T-SQL doit être le suivant :

declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + convert(varchar,@currentdate,103)

Sortie :

Utilisation de l'instruction PRINT dans l'instruction IF…ELSE

Maintenant, imprimons Hello World en fonction de la condition spécifiée dans la boucle IF…ELSE. Si la condition est évaluée TRUE, alors imprimez Hello World . S'il est évalué FALSE, alors imprimez Hello India .

if (0=0)
print 'Hello World'
else 
Print 'Hello India'

Sortie :

De même, vous pouvez utiliser les valeurs stockées dans une variable T-SQL pour comparer et imprimer la sortie.

J'ai créé la procédure stockée qui vérifie l'état de la base de données. S'il est en ligne, il s'imprime EN LIGNE. Sinon, il imprime ERROR. Je passe database_id comme paramètre d'entrée.

Le code T-SQL de la procédure stockée est le suivant :

create procedure getDBStatus
@DatabaseID int 
as
begin
declare @DBStatus varchar(20)
set @DBStatus=(select state_desc from sys.databases where [email protected])
if @DBStatus='ONLINE'
Print ' Database is ONLINE'
else
Print 'Database is in ERROR state.'
End

Exécutez la procédure stockée :

Exec getDBStatus 5

Sortie :

Maintenant, testons la condition ELSE. Exécuter la procédure stockée en utilisant une autre valeur de @ ID de base de données paramètre :

use master
go
exec getDBStatus 6

Sortie :

Utilisation de l'instruction PRINT dans la boucle WHILE

Supposons que vous vouliez imprimer Hello World 10 fois. Ensuite, vous pouvez utiliser la boucle WHILE. Ci-dessous se trouve le code T-SQL pour imprimer hello world plusieurs fois :

Declare @i int =0
declare @iterations int =10
While (@i<@iterations)
Begin
Print 'Hello World'
set @[email protected]+1
End

Sortie :

Maintenant, développons le script de la requête T-SQL générant la sauvegarde de toutes les bases de données utilisateur. Pour afficher la progression du script, nous utilisons l'instruction PRINT.

Dans le script, nous utiliserons la variable suivante en SQL :

  1. @DBcount contient le nombre de bases de données utilisateur. Le type de données est un entier.
  2. @i contient les valeurs incrémentielles. Le type de données est un entier.
  3. @DBName contient la valeur du nom de la base de données. Le type de données est varchar(200).
  4. @SQLCommand contient la base de données de sauvegarde commande. Le type de données est nvarchar(max).
  5. #Bases de données est une table temporaire. Nous insérons le nom des bases de données utilisateur.

Tout d'abord, le script crée une table temporaire nommée #Databases et y insère le nom de la base de données utilisateur.

create table #Databases (name varchar(200))
insert into #Databases select name from sys.databases where database_id>4

Ensuite, il remplit le décompte de la base de données des utilisateurs et enregistre la valeur dans @DBCount paramètre :

set @DBCount=(select count(1) from #Databases)

Ensuite, la boucle WHILE remplit le nom de la base de données. La boucle WHILE s'exécute jusqu'à ce que les valeurs de @i et @DBCount devenir équivalent.

WHILE (@DBCount>@i)

Dans la boucle WHILE, nous utilisons la clause TOP pour obtenir le nom de la base de données à partir de #Databases table et enregistrez-la dans @DBName variables.

Begin
set @DBName=(select top 1 name from #Databases)

Après cela, une commande T-SQL dynamique est créée. Il définit la valeur de @DBName paramètre dans le SQL dynamique.

set @SQLCommand = 'Backup database [' [email protected]+'] to disk =''D:\Backup\' + @DBName +'.bak'''

Pour vérifier que la requête de la base de données de sauvegarde est correcte, nous avons ajouté l'instruction PRINT qui renvoie le @SQLCommand valeur variable.

Print @SQLCommand

L'instruction suivante incrémente la valeur de @I par un et supprime l'enregistrement avec le nom stocké dans le @DBName variables.

delete from #Databases where [email protected]
set @[email protected] + 1
End

Le script complet est le suivant :

set nocount on
declare @DBCount int
declare @i int =0
declare @DBName varchar(200)
declare @SQLCommand nvarchar(max)
create table #Databases (name varchar(200))
insert into #Databases select name from sys.databases where database_id>4 
set @DBCount=(select count(1) from #Databases)
WHILE (@DBCount>@i)
Begin
set @DBName=(select top 1 name from #Databases)
set @SQLCommand = 'Backup database [' [email protected]+'] to disk =''D:\Backup\' + @DBName +'.bak'''
Print @SQLCommand
delete from #Databases where [email protected]
set @[email protected] + 1
End
drop table #Databases

La sortie du script est ci-dessous :

Nous pouvons utiliser le script ci-dessus pour préparer le script spécifique pour sauvegarder toutes les bases de données utilisateur.

Résumé

L'article expliquait l'essence et les limites de l'instruction PRINT sur SQL Server et illustrait son utilisation par des exemples pratiques.