Операторът SQL PRINT служи за показване на дефинираното от потребителя съобщение. Например, разработвате скрипт с T-SQL цикли и искате да покажете някакво конкретно съобщение при всяка итерация на цикъл. След това можете да използвате оператора PRINT. Или можете да го използвате, когато разработвате скрипт с условни изрази. В този случай гарантирате, че условието, оценено от израза, изпълнява правилната стъпка или генерира правилния изход. Инструкцията PRINT може също да се използва за проследяване на процеса на T-SQL заявка или съхранена процедура или за връщане на персонализирано съобщение.
Настоящата статия се фокусира върху следните случаи на употреба:
- Отпечатване на низ или int стойност с помощта на оператора PRINT.
- Използване на PRINT в израза IF…ELSE.
- Използване на PRINT в цикъла WHILE.
Синтаксисът на оператора PRINT е следният:
Print string | @variable | str_expression
- низ :Стойността може да бъде символ или Unicode низ.
- @променлива :Типът на символните данни трябва да бъде символен или Unicode символен тип данни.
- str_expression :стойността може да бъде израз, връща низ. Може да бъде буквална стойност, низова функция и променлива.
Когато използваме оператора PRINT, за да покажем конкретната стойност, изходът се връща в панела за съобщения на SQL Server Management Studio.
Забележка: Изявлението PRINT може да показва низ от 8000 знака или Unicode низ от 4000 знака . Ако дължината надвишава 8000, оставащият низ ще бъде съкратен.
Ограничения на изявлението PRINT
- Функцията PRINT връща символен низ или UNICODE символен низ. Следователно, докато конкатенираме типовете данни низ и целочислени, трябва изрично да преобразуваме стойността INT в тип данни char или varchar.
- Профилизаторът на SQL Server не улавя изрази PRINT.
Пример:Отпечатайте стойността на низ
Да предположим, че искате да напишете изявление, което отпечатва Здравей, свят към екрана. T-SQL трябва да бъде както следва:
Print 'Hello World'
Изход:
За да отпечатате стойността, съхранена в @string променлива, се нуждаем от следния код:
declare @String varchar(30)
set @String='Hello World'
Print @String
Изход:
Отпечатайте целочислена стойност с помощта на оператора PRINT
Използвайте следния T-SQL скрипт:
Print 10
Изход:
За да отпечатате стойността на @intvalue параметър, използвайте следния T-SQL скрипт. Типът данни @intvalue е цяло число.
declare @IntValue Int
set @IntValue = 10
Print @IntValue
Изход:
Можете да изпълнявате основни аритметични функции с помощта на оператора PRINT. Да предположим, че искате да изпълните SUM от две стойности. Можете да го направите, като добавите знака плюс (+) между две числови стойности:
Print 10+10
Изход:
Отпечатайте персонализирани съобщения с помощта на оператора PRINT
Да предположим, че искате да отпечатате текущото време с помощта на оператора PRINT. За да направим това, ние декларираме две променливи SQL PRINT с име @inputstring и @currentdate . Типът данни на @inputstring е varchar(50), и @currentdate е дата и час . Заявката е следната:
declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + @currentdate
Изход:
Възниква грешка. За да коригираме тази грешка, трябва изрично да преобразуваме стойността, съхранена в @currentdate променлива. T-SQL скриптът трябва да бъде както следва:
declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + convert(varchar,@currentdate,103)
Изход:
Използване на оператора PRINT в оператора IF...ELSE
Сега нека отпечатаме Hello World въз основа на условието, определено в цикъла IF…ELSE. Ако условието е вярно, тогава отпечатайте Hello World . Ако оцени FALSE, отпечатайте Здравей, Индия .
if (0=0)
print 'Hello World'
else
Print 'Hello India'
Изход:
По същия начин можете да използвате стойностите, съхранени в T-SQL променлива, за да сравните и отпечатате изхода.
Създадох съхранената процедура, която проверява състоянието на базата данни. Ако е онлайн, печата ОНЛАЙН. В противен случай отпечатва ГРЕШКА. Предавам database_id като входен параметър.
T-SQL кодът на съхранената процедура е както следва:
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
Изпълнете съхранената процедура:
Exec getDBStatus 5
Изход:
Сега нека тестваме условието ELSE. Изпълнете съхранената процедура, като използвате друга стойност @ ИД на база данни параметър:
use master
go
exec getDBStatus 6
Изход:
Използване на оператора PRINT в цикъла WHILE
Да предположим, че искате да отпечатате Hello World 10 пъти. След това можете да използвате цикъла WHILE. По-долу е T-SQL кодът за отпечатване на hello world няколко пъти:
Declare @i int =0
declare @iterations int =10
While (@i<@iterations)
Begin
Print 'Hello World'
set @[email protected]+1
End
Изход:
Сега нека разработим скрипта за T-SQL заявката, генерираща архивиране на всички потребителски бази данни. За да видим напредъка на скрипта, използваме оператора PRINT.
В скрипта ще използваме следната var в SQL:
- @DBcount съдържа броя на потребителските бази данни. Типът данни е цяло число.
- @i съдържа инкременталните стойности. Типът данни е цяло число.
- @DBName съдържа стойността на името на базата данни. Типът данни е varchar(200).
- @SQLCommand съдържа резервната база данни команда. Типът данни е nvarchar(max).
- #Бази данни е временна таблица. Вмъкваме името на потребителските бази данни.
Първо, скриптът създава временна таблица с име #Бази данни и вмъква името на потребителската база данни в него.
create table #Databases (name varchar(200))
insert into #Databases select name from sys.databases where database_id>4
След това попълва броя на потребителската база данни и записва стойността в @DBCount параметър:
set @DBCount=(select count(1) from #Databases)
След това цикълът WHILE попълва името на базата данни. Цикълът WHILE се изпълнява до стойностите на @i и @DBCount стават еквивалентни.
WHILE (@DBCount>@i)
В цикъла WHILE използваме клаузата TOP, за да получим името на базата данни от #Databases таблица и я запазете в @DBName променлива.
Begin
set @DBName=(select top 1 name from #Databases)
След това се създава динамична T-SQL команда. Той задава стойността на @DBName параметър в динамичния SQL.
set @SQLCommand = 'Backup database [' [email protected]+'] to disk =''D:\Backup\' + @DBName +'.bak'''
За да проверим дали заявката за резервна база данни е правилна, добавихме израза PRINT, който връща @SQLCommand стойност на променливата.
Print @SQLCommand
Следващият израз увеличава стойността на @I с едно и изтрива записа с името, съхранено в @DBName променлива.
delete from #Databases where [email protected]
set @[email protected] + 1
End
Пълният скрипт е следният:
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
Резултатът от скрипта е по-долу:
Можем да използваме горния скрипт, за да подготвим конкретния скрипт за архивиране на всички потребителски бази данни.
Резюме
Статията обяснява същността и ограниченията на израза PRINT на SQL Server и илюстрира използването му с практически примери.