sql >> Database teknologi >  >> RDS >> Sqlserver

En oversigt over PRINT-erklæringen i SQL Server

SQL PRINT-sætningen tjener til at vise den brugerdefinerede meddelelse. For eksempel udvikler du et script med T-SQL Loops, og du ønsker at vise en bestemt besked på hver iteration af en loop. Så kan du bruge PRINT-sætningen. Eller du kan bruge det, når du udvikler et script med betingede udsagn. I så fald sikrer du dig, at betingelsen evalueret af sætningen udfører det korrekte trin eller genererer det korrekte output. PRINT-sætningen kan også bruges til at spore processen med en T-SQL-forespørgsel eller en lagret procedure eller til at returnere den tilpassede besked.

Den aktuelle artikel fokuserer på følgende anvendelsestilfælde:

  1. Udskrivning af en streng eller int-værdi ved hjælp af PRINT-erklæringen.
  2. Brug af PRINT i IF…ELSE-sætningen.
  3. Brug af PRINT i WHILE-løkken.

Syntaksen for PRINT-sætningen er følgende:

Print string | @variable | str_expression
  • streng :Værdien kan være et tegn eller en Unicode-streng.
  • @variabel :Tegndatatypen skal være tegn- eller Unicode-tegndatatyper.
  • str_udtryk :værdien kan være et udtryk returnere en streng. Det kan være en bogstavelig værdi, strengfunktion og variabel.

Når vi bruger PRINT-sætningen til at vise den specifikke værdi, returnerer outputtet i SQL Server Management-studiets meddelelsesrude.

Bemærk: PRINT-sætningen kan vise 8000 tegn lang streng eller 4000 tegn lang Unicode-streng . Hvis længden overstiger 8000, vil den resterende streng blive afkortet.

Begrænsninger af PRINT-erklæringen

  1. Funktionen PRINT returnerer en tegnstreng eller UNICODE-tegnstreng. Mens vi sammenkæder datatyperne streng og heltal, skal vi derfor eksplicit konvertere INT-værdien til char- eller varchar-datatype.
  2. SQL Server-profileringsværktøjet fanger ikke PRINT-sætninger.

Eksempel:Udskriv strengværdien

Antag, at du vil skrive en erklæring, der udskriver Hej verden til skærmen. T-SQL skal være som følger:

Print 'Hello World'

Output:

For at udskrive værdien gemt i @strengen variabel, har vi brug for følgende kode:

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

Output:

Udskriv en heltalsværdi ved hjælp af PRINT-sætningen

Brug følgende T-SQL-script:

Print 10

Output:

For at udskrive værdien af ​​@intvalue parameter, skal du bruge følgende T-SQL-script. Datatypen @intvalue er et heltal.

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

Output:

Du kan udføre grundlæggende aritmetiske funktioner ved hjælp af PRINT-sætningen. Antag, at du vil udføre SUM for to værdier. Du kan gøre det ved at tilføje plustegnet (+) mellem to numeriske værdier:

Print 10+10

Output:

Udskriv tilpassede meddelelser ved hjælp af PRINT-sætningen

Antag, at du vil udskrive det aktuelle tidspunkt ved hjælp af PRINT-sætningen. For at gøre det erklærer vi to SQL PRINT-variabler med navnet @inputstring og @aktuel dato . Datatypen for @inputstreng er varchar(50), og @aktuel dato er datotid . Forespørgslen er følgende:

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

Output:

Der opstår en fejl. For at rette denne fejl skal vi eksplicit konvertere værdien gemt i @currentdate variabel. T-SQL-scriptet skal være som følger:

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

Output:

Brug af PRINT-sætningen i IF…ELSE-sætningen

Lad os nu udskrive Hello World baseret på den betingelse, der er angivet i IF...ELSE-løkken. Hvis betingelsen evaluerer SAND, så udskriv Hello World . Hvis den vurderer FALSK, så udskriv Hej Indien .

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

Output:

På samme måde kan du bruge værdierne gemt i en T-SQL-variabel til at sammenligne og udskrive outputtet.

Jeg har oprettet den lagrede procedure, der kontrollerer databasens status. Hvis det er online, udskrives det ONLINE. Ellers udskriver den ERROR. Jeg sender database_id som inputparameter.

T-SQL-koden for den lagrede procedure er som følger:

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

Udfør den lagrede procedure:

Exec getDBStatus 5

Output:

Lad os nu teste ANDET-tilstanden. Kør den lagrede procedure med en anden værdi af @ database-ID parameter:

use master
go
exec getDBStatus 6

Output:

Brug af PRINT-erklæringen i WHILE-løkken

Antag, at du vil udskrive Hello World 10 gange. Så kan du bruge WHILE-løkken. Nedenfor er T-SQL-koden til at udskrive hello world flere gange:

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

Output:

Lad os nu udvikle scriptet til T-SQL-forespørgslen, der genererer backup af alle brugerdatabaser. For at se scriptets fremskridt bruger vi PRINT-sætningen.

I scriptet bruger vi følgende var i SQL:

  1. @DBcount holder antallet af brugerdatabaser. Datatypen er et heltal.
  2. @i holder de trinvise værdier. Datatypen er et heltal.
  3. @DBName indeholder værdien af ​​databasenavnet. Datatypen er varchar(200).
  4. @SQLCommand indeholder Sikkerhedskopidatabasen kommando. Datatypen er nvarchar(max).
  5. #Databaser er et vikarbord. Vi er ved at indsætte navnet på brugerdatabaserne.

Først opretter scriptet en midlertidig tabel med navnet #Databaser og indsætter brugerdatabasenavnet i det.

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

Derefter udfylder den antallet af brugerdatabasen og gemmer værdien i @DBCount parameter:

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

Derefter udfylder WHILE-løkken navnet på databasen. WHILE-løkken udføres indtil værdierne @i og @DBCount blive tilsvarende.

WHILE (@DBCount>@i)

I WHILE-løkken bruger vi TOP-sætningen til at hente navnet på databasen fra #Databaser tabel og gem den i @DBName variabel.

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

Derefter oprettes en dynamisk T-SQL-kommando. Den indstiller værdien af ​​@DBName parameter i den dynamiske SQL.

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

For at bekræfte, at backupdatabaseforespørgslen er korrekt, har vi tilføjet PRINT-sætningen, der returnerer @SQLCommand variabel værdi.

Print @SQLCommand

Den næste sætning øger værdien af ​​@I af én og sletter posten med navnet gemt i @DBName variabel.

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

Det fulde script er følgende:

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

Scriptoutputtet er nedenfor:

Vi kan bruge ovenstående script til at forberede det specifikke script til sikkerhedskopiering af alle brugerdatabaser.

Oversigt

Artiklen forklarede essensen og begrænsningerne af PRINT-sætningen på SQL Server og illustrerede dens brug med praktiske eksempler.


  1. MariaDB JSON_QUOTE() Forklaret

  2. Hvordan bruger man RETURNING med ON CONFLICT i PostgreSQL?

  3. Er der et PL/SQL-pragma, der ligner DETERMINISTIC, men for omfanget af et enkelt SQL SELECT?

  4. Top fem overvejelser for databaseindeksdesign i SQL Server