sql >> Databáze >  >> RDS >> Sqlserver

Přehled příkazu PRINT na serveru SQL

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í:

  1. Tisk řetězce nebo hodnoty int pomocí příkazu PRINT.
  2. Použití PRINT v příkazu IF…ELSE.
  3. 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

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

  1. @DBcount obsahuje počet uživatelských databází. Datový typ je celé číslo.
  2. @i obsahuje přírůstkové hodnoty. Datový typ je celé číslo.
  3. @DBName obsahuje hodnotu názvu databáze. Datový typ je varchar(200).
  4. @SQLCommand obsahuje Záložní databázi příkaz. Typ dat je nvarchar(max).
  5. #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.


  1. OracleParameter a klauzule IN

  2. Jak získám Oracle SCHEMA jako skripty DDL s DBMS_METADATA (a SCHEMA_EXPORT)

  3. Existuje způsob, jak vybrat, aniž by došlo k zamykání v MySQL?

  4. AKTUALIZOVÁNO:Chyba způsobuje, že Microsoft Office 365 Build 2105 přerušuje přístupové aplikace