Příkaz SQL PRINT slouží k zobrazení uživatelem definované zprávy. Například vyvíjíte skript s smyčkami T-SQL a chcete zobrazit určitou konkrétní zprávu při každé iteraci smyčky. Potom můžete použít příkaz PRINT. Nebo jej můžete použít při vývoji skriptu s podmíněnými příkazy. V takovém případě zajistíte, že podmínka vyhodnocená příkazem provede správný krok nebo vygeneruje správný výstup. Příkaz PRINT lze také použít ke sledování procesu dotazu T-SQL nebo uložené procedury nebo k vrácení přizpůsobené zprávy.
Aktuální článek se zaměřuje na následující případy použití:
- Tisk řetězce nebo hodnoty int pomocí příkazu PRINT.
- Použití PRINT v příkazu IF…ELSE.
- Použití PRINT ve smyčce WHILE.
Syntaxe příkazu PRINT je následující:
Print string | @variable | str_expression
- řetězec :Hodnota může být znak nebo řetězec Unicode.
- @proměnná :Znakový datový typ musí být znakový nebo znakový datový typ Unicode.
- str_expression :hodnota může být výraz, který vrátí řetězec. Může to být doslovná hodnota, řetězcová funkce a proměnná.
Když k zobrazení konkrétní hodnoty použijeme příkaz PRINT, výstup se vrátí do podokna zpráv studia SQL Server Management.
Poznámka: Příkaz PRINT může zobrazit řetězec dlouhý 8000 znaků nebo řetězec Unicode dlouhý 4000 znaků . Pokud délka překročí 8000, zbývající řetězec bude zkrácen.
Omezení příkazu PRINT
- Funkce PRINT vrací řetězec znaků nebo řetězec znaků UNICODE. Proto při zřetězení datových typů string a Integer musíme explicitně převést hodnotu INT na datový typ char nebo varchar.
- Profiler SQL Server nezachycuje příkazy PRINT.
Příklad:Vytiskněte hodnotu řetězce
Předpokládejme, že chcete napsat prohlášení, které vytiskne Ahoj, světe na obrazovku. T-SQL by mělo vypadat následovně:
Print 'Hello World'
Výstup:
Chcete-li vytisknout hodnotu uloženou v @řetězec proměnnou, potřebujeme následující kód:
declare @String varchar(30)
set @String='Hello World'
Print @String
Výstup:
Vytiskněte celočíselnou hodnotu pomocí příkazu PRINT
Použijte následující skript T-SQL:
Print 10
Výstup:
Chcete-li vytisknout hodnotu @intvalue použijte následující skript T-SQL. Datový typ @intvalue je celé číslo.
declare @IntValue Int
set @IntValue = 10
Print @IntValue
Výstup:
Pomocí příkazu PRINT můžete provádět základní aritmetické funkce. Předpokládejme, že chcete provést součet dvou hodnot. Můžete to udělat přidáním znaménka plus (+) mezi dvě číselné hodnoty:
Print 10+10
Výstup:
Tisk vlastních zpráv pomocí příkazu PRINT
Předpokládejme, že chcete vytisknout aktuální čas pomocí příkazu PRINT. Za tímto účelem deklarujeme dvě proměnné SQL PRINT s názvem @inputstring a @currentdate . Datový typ @inputstring je varchar(50), a @currentdate je datum a čas . Dotaz je následující:
declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + @currentdate
Výstup:
Došlo k chybě. Abychom tuto chybu opravili, musíme explicitně převést hodnotu uloženou v @currentdate variabilní. Skript T-SQL by měl vypadat následovně:
declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + convert(varchar,@currentdate,103)
Výstup:
Použití příkazu PRINT v příkazu IF…ELSE
Nyní vytiskneme Ahoj světe na základě podmínky specifikované ve smyčce IF…ELSE. Pokud je podmínka vyhodnocena jako PRAVDA, vytiskněte Ahoj světe . Pokud má hodnotu FALSE, vytiskněte Ahoj Indie .
if (0=0)
print 'Hello World'
else
Print 'Hello India'
Výstup:
Podobně můžete použít hodnoty uložené v proměnné T-SQL k porovnání a tisku výstupu.
Vytvořil jsem uloženou proceduru, která kontroluje stav databáze. Pokud je online, tiskne se ONLINE. Jinak se vypíše CHYBA. Předávám database_id jako vstupní parametr.
Kód T-SQL uložené procedury je následující:
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
Spusťte uloženou proceduru:
Exec getDBStatus 5
Výstup:
Nyní otestujme podmínku ELSE. Spusťte uloženou proceduru pomocí jiné hodnoty @ ID databáze parametr:
use master
go
exec getDBStatus 6
Výstup:
Použití příkazu PRINT ve smyčce WHILE
Předpokládejme, že chcete vytisknout Hello World 10krát. Poté můžete použít smyčku WHILE. Níže je uveden kód T-SQL pro vícenásobný tisk Hello world:
Declare @i int =0
declare @iterations int =10
While (@i<@iterations)
Begin
Print 'Hello World'
set @[email protected]+1
End
Výstup:
Nyní pojďme vyvinout skript pro T-SQL dotaz generující zálohu všech uživatelských databází. Pro zobrazení průběhu skriptu používáme příkaz PRINT.
Ve skriptu použijeme v SQL následující var:
- @DBcount obsahuje počet uživatelských databází. Datový typ je celé číslo.
- @i obsahuje přírůstkové hodnoty. Datový typ je celé číslo.
- @DBName obsahuje hodnotu názvu databáze. Datový typ je varchar(200).
- @SQLCommand obsahuje Záložní databázi příkaz. Typ dat je nvarchar(max).
- #Databáze je dočasná tabulka. Vkládáme názvy uživatelských databází.
Nejprve skript vytvoří dočasnou tabulku s názvem #Databáze a vloží do něj název uživatelské databáze.
create table #Databases (name varchar(200))
insert into #Databases select name from sys.databases where database_id>4
Poté vyplní počet v databázi uživatelů a uloží hodnotu do @DBCount parametr:
set @DBCount=(select count(1) from #Databases)
Dále smyčka WHILE naplní název databáze. Cyklus WHILE se spouští, dokud nejsou hodnoty @i a @DBCount se stanou rovnocennými.
WHILE (@DBCount>@i)
Ve smyčce WHILE používáme klauzuli TOP k získání názvu databáze z #Databází tabulku a uložte ji do @DBName proměnná.
Begin
set @DBName=(select top 1 name from #Databases)
Poté se vytvoří dynamický příkaz T-SQL. Nastavuje hodnotu @DBName parametr v dynamickém SQL.
set @SQLCommand = 'Backup database [' [email protected]+'] to disk =''D:\Backup\' + @DBName +'.bak'''
Abychom ověřili, že je dotaz na záložní databázi správný, přidali jsme příkaz PRINT, který vrací @SQLCommand proměnná hodnota.
Print @SQLCommand
Další příkaz zvýší hodnotu @I o jednu a smaže záznam s názvem uloženým v @DBName proměnná.
delete from #Databases where [email protected]
set @[email protected] + 1
End
Úplný skript je následující:
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
Výstup skriptu je níže:
Výše uvedený skript můžeme použít k přípravě konkrétního skriptu pro zálohování všech uživatelských databází.
Shrnutí
Článek vysvětlil podstatu a omezení příkazu PRINT na SQL Server a ilustroval jeho použití na praktických příkladech.