De SQL PRINT-instructie dient om het door de gebruiker gedefinieerde bericht weer te geven. U ontwikkelt bijvoorbeeld een script met T-SQL-loops en u wilt bij elke iteratie van een lus een specifiek bericht weergeven. Dan kunt u het PRINT-statement gebruiken. Of u kunt het gebruiken bij het ontwikkelen van een script met voorwaardelijke instructies. In dat geval zorgt u ervoor dat de voorwaarde die door de instructie wordt geëvalueerd, de juiste stap uitvoert of de juiste uitvoer genereert. De PRINT-instructie kan ook worden gebruikt om het proces van een T-SQL-query of een opgeslagen procedure te volgen of om het aangepaste bericht te retourneren.
Het huidige artikel richt zich op de volgende gebruiksscenario's:
- Een tekenreeks of int-waarde afdrukken met de PRINT-instructie.
- PRINT gebruiken in de IF...ELSE-instructie.
- PRINT gebruiken in de WHILE Loop.
De syntaxis van het PRINT-statement is als volgt:
Print string | @variable | str_expression
- string :De waarde kan een teken of Unicode-tekenreeks zijn.
- @variabele :Het karaktergegevenstype moet karakter- of Unicode-tekengegevenstypes zijn.
- str_expression :de waarde kan een uitdrukking zijn die een tekenreeks retourneert. Het kan een letterlijke waarde, tekenreeksfunctie en variabele zijn.
Wanneer we de PRINT-instructie gebruiken om de specifieke waarde weer te geven, keert de uitvoer terug in het berichtenvenster van SQL Server Management Studio.
Opmerking: De PRINT-instructie kan 8000 tekens lange tekenreeks of 4000 tekens lange Unicode-reeks weergeven .Als de lengte groter is dan 8000, wordt de resterende string afgekapt.
Beperkingen van de PRINT-instructie
- De functie PRINT retourneert een tekenreeks of UNICODE-tekenreeks. Daarom moeten we bij het aaneenschakelen van de gegevenstypen string en Integer de INT-waarde expliciet converteren naar het gegevenstype char of varchar.
- De SQL Server-profiler legt geen PRINT-instructies vast.
Voorbeeld:druk de tekenreekswaarde af
Stel dat u een verklaring wilt schrijven met de tekst Hallo, wereld naar het scherm. De T-SQL zou als volgt moeten zijn:
Print 'Hello World'
Uitgang:
De waarde afdrukken die is opgeslagen in de @string variabele, hebben we de volgende code nodig:
declare @String varchar(30)
set @String='Hello World'
Print @String
Uitgang:
Druk een Integer-waarde af met het PRINT-statement
Gebruik het volgende T-SQL-script:
Print 10
Uitgang:
De waarde van de @intvalue . afdrukken parameter, gebruik dan het volgende T-SQL-script. Het gegevenstype @intvalue is een geheel getal.
declare @IntValue Int
set @IntValue = 10
Print @IntValue
Uitgang:
U kunt elementaire rekenkundige functies uitvoeren met behulp van de PRINT-instructie. Stel dat u de SOM van twee waarden wilt uitvoeren. U kunt dit doen door het plusteken (+) toe te voegen tussen twee numerieke waarden:
Print 10+10
Uitgang:
Druk aangepaste berichten af met het PRINT-statement
Stel dat u de huidige tijd wilt afdrukken met het PRINT-statement. Om dat te doen, declareren we twee SQL PRINT-variabelen genaamd @inputstring en @currentdate . Het gegevenstype van de @inputstring is varchar(50), en @currentdate is datetime . De vraag is de volgende:
declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + @currentdate
Uitgang:
Er treedt een fout op. Om deze fout op te lossen, moeten we expliciet de waarde converteren die is opgeslagen in de @currentdate variabel. Het T-SQL-script moet als volgt zijn:
declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + convert(varchar,@currentdate,103)
Uitgang:
Het PRINT-statement gebruiken in het IF...ELSE-statement
Laten we nu Hallo wereld print afdrukken gebaseerd op de voorwaarde gespecificeerd in de IF...ELSE-lus. Als de voorwaarde WAAR evalueert, druk dan Hallo wereld . af . Als het FALSE evalueert, druk dan Hallo India af .
if (0=0)
print 'Hello World'
else
Print 'Hello India'
Uitgang:
Op dezelfde manier kunt u de waarden gebruiken die zijn opgeslagen in een T-SQL-variabele om de uitvoer te vergelijken en af te drukken.
Ik heb de opgeslagen procedure gemaakt die de status van de database controleert. Als het online is, wordt het ONLINE afgedrukt. Anders drukt het ERROR af. Ik passeer database_id als invoerparameter.
De T-SQL-code van de opgeslagen procedure is als volgt:
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
Voer de opgeslagen procedure uit:
Exec getDBStatus 5
Uitgang:
Laten we nu de ELSE-voorwaarde testen. Voer de opgeslagen procedure uit met een andere waarde van @ databaseID parameter:
use master
go
exec getDBStatus 6
Uitgang:
Het PRINT-statement gebruiken in de WHILE-lus
Stel dat u Hello World 10 keer wilt afdrukken. Dan kun je de WHILE-lus gebruiken. Hieronder staat de T-SQL-code om hallo wereld meerdere keren af te drukken:
Declare @i int =0
declare @iterations int =10
While (@i<@iterations)
Begin
Print 'Hello World'
set @[email protected]+1
End
Uitgang:
Laten we nu het script ontwikkelen voor de T-SQL-query die de back-up van alle gebruikersdatabases genereert. Om de voortgang van het script te bekijken, gebruiken we de PRINT-instructie.
In het script gebruiken we de volgende var in SQL:
- @DBcount bevat het aantal gebruikersdatabases. Het gegevenstype is een geheel getal.
- @i houdt de incrementele waarden vast. Het gegevenstype is een geheel getal.
- @DBName bevat de waarde van de databasenaam. Het gegevenstype is varchar(200).
- @SQLCommand bevat de Back-updatabase opdracht. Het gegevenstype is nvarchar(max).
- #Databases is een temptabel. We voegen de naam van de gebruikersdatabases in.
Eerst maakt het script een tijdelijke tabel met de naam #Databases en voegt de naam van de gebruikersdatabase erin in.
create table #Databases (name varchar(200))
insert into #Databases select name from sys.databases where database_id>4
Vervolgens vult het de telling van de gebruikersdatabase en slaat de waarde op in de @DBCount parameter:
set @DBCount=(select count(1) from #Databases)
Vervolgens vult de WHILE-lus de naam van de database. De WHILE-lus wordt uitgevoerd totdat de waarden van @i en @DBCount gelijkwaardig worden.
WHILE (@DBCount>@i)
In de WHILE-lus gebruiken we de TOP-clausule om de naam van de database te halen uit de #Databases tabel en sla deze op in de @DBName variabel.
Begin
set @DBName=(select top 1 name from #Databases)
Daarna wordt een dynamische T-SQL-opdracht gemaakt. Het stelt de waarde in van de @DBName parameter in de dynamische SQL.
set @SQLCommand = 'Backup database [' [email protected]+'] to disk =''D:\Backup\' + @DBName +'.bak'''
Om te controleren of de back-updatabasequery correct is, hebben we de PRINT-instructie toegevoegd die de @SQLCommand retourneert variabele waarde.
Print @SQLCommand
De volgende instructie verhoogt de waarde van @I met één en verwijdert het record met de naam die is opgeslagen in de @DBName variabel.
delete from #Databases where [email protected]
set @[email protected] + 1
End
Het volledige script is als volgt:
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
De uitvoer van het script is hieronder:
We kunnen het bovenstaande script gebruiken om het specifieke script voor te bereiden voor het maken van back-ups van alle gebruikersdatabases.
Samenvatting
Het artikel legde de essentie en beperkingen van de PRINT-instructie op SQL Server uit en illustreerde het gebruik ervan aan de hand van praktische voorbeelden.