sql >> Databasteknik >  >> RDS >> Sqlserver

En översikt över PRINT-satsen i SQL Server

SQL PRINT-satsen tjänar till att visa det användardefinierade meddelandet. Till exempel utvecklar du ett skript med T-SQL-loopar och du vill visa ett specifikt meddelande vid varje iteration av en loop. Sedan kan du använda PRINT-satsen. Eller så kan du använda det när du utvecklar ett skript med villkorliga uttalanden. I så fall säkerställer du att villkoret som utvärderas av satsen utför rätt steg eller genererar korrekt utdata. PRINT-satsen kan också användas för att spåra processen för en T-SQL-fråga eller en lagrad procedur eller för att returnera det anpassade meddelandet.

Den aktuella artikeln fokuserar på följande användningsfall:

  1. Skriva ut en sträng eller int-värde med PRINT-satsen.
  2. Använder PRINT i IF…ELSE-satsen.
  3. Använda PRINT i WHILE-loopen.

Syntaxen för PRINT-satsen är följande:

Print string | @variable | str_expression
  • sträng :Värdet kan vara ett tecken eller Unicode-sträng.
  • @variabel :Teckendatatypen måste vara tecken- eller Unicode-teckendatatyper.
  • str_expression :värdet kan vara ett uttryck returnera en sträng. Det kan vara ett bokstavligt värde, strängfunktion och variabel.

När vi använder PRINT-satsen för att visa det specifika värdet, returneras utdata i SQL Server Management-studions meddelandefönster.

Obs! PRINT-satsen kan visa 8000 tecken lång sträng eller 4000 tecken lång Unicode-sträng . Om längden överstiger 8000 kommer den återstående strängen att trunkeras.

Begränsningar för PRINT-utlåtandet

  1. Funktionen PRINT returnerar en teckensträng eller UNICODE-teckensträng. När vi sammanfogar datatyperna sträng och heltal måste vi därför uttryckligen konvertera INT-värdet till char- eller varchar-datatyp.
  2. SQL Server-profileraren fångar inte PRINT-satser.

Exempel:Skriv ut strängvärdet

Anta att du vill skriva ett uttalande som skriver ut Hej världen till skärmen. T-SQL bör vara som följer:

Print 'Hello World'

Utdata:

För att skriva ut värdet lagrat i @string variabel behöver vi följande kod:

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

Utdata:

Skriv ut ett heltalsvärde med PRINT-satsen

Använd följande T-SQL-skript:

Print 10

Utdata:

För att skriva ut värdet för @intvalue parametern, använd följande T-SQL-skript. Datatypen @intvalue är ett heltal.

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

Utdata:

Du kan utföra grundläggande aritmetiska funktioner med PRINT-satsen. Anta att du vill utföra SUMMA av två värden. Du kan göra det genom att lägga till plustecknet (+) mellan två numeriska värden:

Print 10+10

Utdata:

Skriv ut anpassade meddelanden med PRINT-satsen

Anta att du vill skriva ut aktuell tid med PRINT-satsen. För att göra det deklarerar vi två SQL PRINT-variabler med namnet @inputstring och @currentdate . Datatypen för @inputstring är varchar(50), och @currentdate är datumtid . Frågan är följande:

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

Utdata:

Ett fel uppstår. För att åtgärda det här felet måste vi uttryckligen konvertera värdet som lagrats i @currentdate variabel. T-SQL-skriptet ska vara enligt följande:

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

Utdata:

Använda PRINT-satsen i IF…ELSE-satsen

Låt oss nu skriva ut Hello World baserat på villkoret som anges i IF...ELSE-slingan. Om villkoret utvärderas TRUE, skriv ut Hello World . Om den utvärderar FALSE, skriv ut Hej Indien .

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

Utdata:

På samma sätt kan du använda värdena som är lagrade i en T-SQL-variabel för att jämföra och skriva ut resultatet.

Jag har skapat den lagrade proceduren som kontrollerar databasens status. Om den är online skrivs den ut ONLINE. Annars skriver den ERROR. Jag skickar database_id som en ingångsparameter.

T-SQL-koden för den lagrade proceduren är som följer:

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

Utför den lagrade proceduren:

Exec getDBStatus 5

Utdata:

Låt oss nu testa ANDRA-villkoret. Kör lagrad procedur med ett annat värde på @ databas-ID parameter:

use master
go
exec getDBStatus 6

Utdata:

Använda PRINT-satsen i WHILE-slingan

Anta att du vill skriva ut Hello World 10 gånger. Då kan du använda WHILE-slingan. Nedan finns T-SQL-koden för att skriva ut hello world flera gånger:

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

Utdata:

Låt oss nu utveckla skriptet för T-SQL-frågan som genererar säkerhetskopian av alla användardatabaser. För att se skriptförloppet använder vi PRINT-satsen.

I skriptet använder vi följande var i SQL:

  1. @DBcount innehåller antalet användardatabaser. Datatypen är ett heltal.
  2. @i håller de inkrementella värdena. Datatypen är ett heltal.
  3. @DBName innehåller värdet på databasnamnet. Datatypen är varchar(200).
  4. @SQLCommand innehåller Säkerhetskopieringsdatabasen kommando. Datatypen är nvarchar(max).
  5. #Databaser är ett tempbord. Vi infogar namnet på användardatabaserna.

Först skapar skriptet en temporär tabell med namnet #Databaser och infogar användardatabasens namn i den.

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

Sedan fyller den i antalet för användardatabasen och sparar värdet i @DBCount parameter:

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

Därefter fyller WHILE-loopen namnet på databasen. WHILE-slingan körs tills värdena @i och @DBCount bli likvärdig.

WHILE (@DBCount>@i)

I WHILE-loopen använder vi TOP-satsen för att hämta namnet på databasen från #Databaser tabellen och spara den i @DBName variabel.

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

Därefter skapas ett dynamiskt T-SQL-kommando. Den anger värdet för @DBName parameter i dynamisk SQL.

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

För att verifiera att säkerhetskopieringsdatabasfrågan är korrekt har vi lagt till PRINT-satsen som returnerar @SQLCommand variabelt värde.

Print @SQLCommand

Nästa programsats ökar värdet @I av en och raderar posten med namnet lagrat i @DBName variabel.

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

Det fullständiga skriptet är följande:

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

Skriptutgången är nedan:

Vi kan använda skriptet ovan för att förbereda det specifika skriptet för säkerhetskopiering av alla användardatabaser.

Sammanfattning

Artikeln förklarade kärnan och begränsningarna för PRINT-satsen på SQL Server och illustrerade dess användning med praktiska exempel.


  1. Oracle Update Query med hjälp av Join

  2. Hur man startar upp MySQL eller MariaDB Galera Cluster - Uppdaterad

  3. Uppdateringar av PostgreSQL-testverktyg med benchmark-arkiv

  4. Är kapslade transaktioner tillåtna i MySQL?