Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ein Überblick über die PRINT-Anweisung in SQL Server

Die SQL PRINT-Anweisung dient zur Anzeige der benutzerdefinierten Meldung. Sie entwickeln beispielsweise ein Skript mit T-SQL-Schleifen und möchten bei jeder Iteration einer Schleife eine bestimmte Meldung anzeigen. Dann können Sie die PRINT-Anweisung verwenden. Oder Sie können es verwenden, wenn Sie ein Skript mit bedingten Anweisungen entwickeln. In diesem Fall stellen Sie sicher, dass die von der Anweisung ausgewertete Bedingung den richtigen Schritt ausführt oder die richtige Ausgabe generiert. Die PRINT-Anweisung kann auch verwendet werden, um den Prozess einer T-SQL-Abfrage oder einer gespeicherten Prozedur zu verfolgen oder um die angepasste Nachricht zurückzugeben.

Der aktuelle Artikel konzentriert sich auf die folgenden Anwendungsfälle:

  1. Drucken eines String- oder Int-Werts mit der PRINT-Anweisung.
  2. Verwendung von PRINT in der IF…ELSE-Anweisung.
  3. Druck in der WHILE-Schleife verwenden.

Die Syntax der PRINT-Anweisung lautet wie folgt:

Print string | @variable | str_expression
  • Zeichenfolge :Der Wert kann ein Zeichen- oder Unicode-String sein.
  • @variable :Der Zeichendatentyp muss ein Zeichen- oder Unicode-Zeichendatentyp sein.
  • str_expression :Der Wert kann ein Ausdruck sein, der eine Zeichenfolge zurückgibt. Es kann ein Literalwert, eine Zeichenfolgenfunktion und eine Variable sein.

Wenn wir die PRINT-Anweisung verwenden, um den spezifischen Wert anzuzeigen, kehrt die Ausgabe im Meldungsbereich von SQL Server Management Studio zurück.

Hinweis: Die PRINT-Anweisung kann eine 8000 Zeichen lange Zeichenfolge oder eine 4000 Zeichen lange Unicode-Zeichenfolge anzeigen . Wenn die Länge 8000 überschreitet, wird die verbleibende Zeichenfolge abgeschnitten.

Einschränkungen der PRINT-Anweisung

  1. Die PRINT-Funktion gibt eine Zeichenkette oder UNICODE-Zeichenkette zurück. Daher müssen wir beim Verketten der Datentypen string und Integer den INT-Wert explizit in den Datentyp char oder varchar umwandeln.
  2. Der SQL Server-Profiler erfasst keine PRINT-Anweisungen.

Beispiel:Den String-Wert drucken

Angenommen, Sie möchten eine Anweisung schreiben, die Hello, World ausgibt zum Bildschirm. Das T-SQL sollte wie folgt lauten:

Print 'Hello World'

Ausgabe:

Um den in @string gespeicherten Wert zu drucken Variable benötigen wir folgenden Code:

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

Ausgabe:

Einen Integer-Wert mit der PRINT-Anweisung drucken

Verwenden Sie das folgende T-SQL-Skript:

Print 10

Ausgabe:

Um den Wert von @intvalue zu drucken verwenden Sie das folgende T-SQL-Skript. Der Datentyp von @intvalue ist eine Ganzzahl.

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

Ausgabe:

Mit der PRINT-Anweisung können Sie grundlegende arithmetische Funktionen ausführen. Angenommen, Sie möchten die SUMME von zwei Werten durchführen. Sie können dies tun, indem Sie das Pluszeichen (+) zwischen zwei numerische Werte einfügen:

Print 10+10

Ausgabe:

Benutzerdefinierte Nachrichten mit der PRINT-Anweisung drucken

Angenommen, Sie möchten die aktuelle Uhrzeit mit der PRINT-Anweisung drucken. Dazu deklarieren wir zwei SQL PRINT-Variablen namens @inputstring und @aktuelles Datum . Der Datentyp von @inputstring ist varchar(50), und @aktuelles Datum ist datetime . Die Abfrage lautet wie folgt:

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

Ausgabe:

Ein Fehler tritt auf. Um diesen Fehler zu beheben, müssen wir den in @currentdate gespeicherten Wert explizit konvertieren Variable. Das T-SQL-Skript sollte wie folgt aussehen:

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

Ausgabe:

Verwendung der PRINT-Anweisung in der IF…ELSE-Anweisung

Lassen Sie uns jetzt Hallo Welt drucken basierend auf der in der IF…ELSE-Schleife angegebenen Bedingung. Wenn die Bedingung WAHR auswertet, geben Sie Hello World aus . Wenn es FALSCH auswertet, dann Hello India ausgeben .

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

Ausgabe:

Ebenso können Sie die in einer T-SQL-Variablen gespeicherten Werte verwenden, um die Ausgabe zu vergleichen und zu drucken.

Ich habe die gespeicherte Prozedur erstellt, die den Status der Datenbank überprüft. Wenn es online ist, druckt es ONLINE. Andernfalls wird ERROR ausgegeben. Ich übergebe database_id als Eingabeparameter.

Der T-SQL-Code der gespeicherten Prozedur lautet wie folgt:

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

Führen Sie die gespeicherte Prozedur aus:

Exec getDBStatus 5

Ausgabe:

Lassen Sie uns nun die ELSE-Bedingung testen. Führen Sie die gespeicherte Prozedur mit einem anderen Wert von @ aus Datenbank-ID Parameter:

use master
go
exec getDBStatus 6

Ausgabe:

Verwenden der PRINT-Anweisung in der WHILE-Schleife

Angenommen, Sie möchten Hello World 10 Mal drucken. Dann können Sie die WHILE-Schleife verwenden. Unten ist der T-SQL-Code, um „Hallo Welt“ mehrmals auszugeben:

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

Ausgabe:

Lassen Sie uns nun das Skript für die T-SQL-Abfrage entwickeln, die die Sicherung aller Benutzerdatenbanken generiert. Um den Skriptfortschritt anzuzeigen, verwenden wir die PRINT-Anweisung.

Im Skript verwenden wir die folgende Variable in SQL:

  1. @DBcount enthält die Anzahl der Benutzerdatenbanken. Der Datentyp ist eine Ganzzahl.
  2. @i enthält die inkrementellen Werte. Der Datentyp ist eine Ganzzahl.
  3. @DBName enthält den Wert des Datenbanknamens. Der Datentyp ist varchar(200).
  4. @SQLCommand enthält die Sicherungsdatenbank Befehl. Der Datentyp ist nvarchar(max).
  5. #Datenbanken ist eine temporäre Tabelle. Wir fügen den Namen der Benutzerdatenbanken ein.

Zuerst erstellt das Skript eine temporäre Tabelle mit dem Namen #Datenbanken und fügt den Namen der Benutzerdatenbank darin ein.

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

Dann füllt es die Anzahl der Benutzerdatenbank und speichert den Wert in @DBCount Parameter:

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

Als nächstes füllt die WHILE-Schleife den Namen der Datenbank. Die WHILE-Schleife wird ausgeführt, bis die Werte von @i und @DBCount gleichwertig werden.

WHILE (@DBCount>@i)

In der WHILE-Schleife verwenden wir die TOP-Klausel, um den Namen der Datenbank aus #Databases abzurufen Tabelle und speichern Sie sie in @DBName Variable.

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

Danach wird ein dynamischer T-SQL-Befehl erstellt. Es setzt den Wert von @DBName Parameter im dynamischen SQL.

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

Um zu überprüfen, ob die Abfrage der Sicherungsdatenbank korrekt ist, haben wir die PRINT-Anweisung hinzugefügt, die @SQLCommand zurückgibt Variablenwert.

Print @SQLCommand

Die nächste Anweisung erhöht den Wert von @I um eins und löscht den Datensatz mit dem in @DBName gespeicherten Namen Variable.

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

Das vollständige Skript lautet wie folgt:

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

Die Skriptausgabe ist unten:

Wir können das obige Skript verwenden, um das spezifische Skript zum Sichern aller Benutzerdatenbanken vorzubereiten.

Zusammenfassung

Der Artikel erläuterte das Wesen und die Einschränkungen der PRINT-Anweisung auf SQL Server und veranschaulichte ihre Verwendung durch praktische Beispiele.