sql >> Database >  >> RDS >> Sqlserver

Een overzicht van de PRINT-instructie in SQL Server

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:

  1. Een tekenreeks of int-waarde afdrukken met de PRINT-instructie.
  2. PRINT gebruiken in de IF...ELSE-instructie.
  3. 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

  1. 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.
  2. 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:

  1. @DBcount bevat het aantal gebruikersdatabases. Het gegevenstype is een geheel getal.
  2. @i houdt de incrementele waarden vast. Het gegevenstype is een geheel getal.
  3. @DBName bevat de waarde van de databasenaam. Het gegevenstype is varchar(200).
  4. @SQLCommand bevat de Back-updatabase opdracht. Het gegevenstype is nvarchar(max).
  5. #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.


  1. ORA-24408:kan geen unieke servergroepsnaam genereren

  2. Selecteer gegevens tussen een datum/tijdbereik

  3. Een logo toevoegen aan een rapportkoptekst in Microsoft Access

  4. ONLY_FULL_GROUP_BY uitschakelen