Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Общ преглед на оператора PRINT в SQL Server

Операторът SQL PRINT служи за показване на дефинираното от потребителя съобщение. Например, разработвате скрипт с T-SQL цикли и искате да покажете някакво конкретно съобщение при всяка итерация на цикъл. След това можете да използвате оператора PRINT. Или можете да го използвате, когато разработвате скрипт с условни изрази. В този случай гарантирате, че условието, оценено от израза, изпълнява правилната стъпка или генерира правилния изход. Инструкцията PRINT може също да се използва за проследяване на процеса на T-SQL заявка или съхранена процедура или за връщане на персонализирано съобщение.

Настоящата статия се фокусира върху следните случаи на употреба:

  1. Отпечатване на низ или int стойност с помощта на оператора PRINT.
  2. Използване на PRINT в израза IF…ELSE.
  3. Използване на PRINT в цикъла WHILE.

Синтаксисът на оператора PRINT е следният:

Print string | @variable | str_expression
  • низ :Стойността може да бъде символ или Unicode низ.
  • @променлива :Типът на символните данни трябва да бъде символен или Unicode символен тип данни.
  • str_expression :стойността може да бъде израз, връща низ. Може да бъде буквална стойност, низова функция и променлива.

Когато използваме оператора PRINT, за да покажем конкретната стойност, изходът се връща в панела за съобщения на SQL Server Management Studio.

Забележка: Изявлението PRINT може да показва низ от 8000 знака или Unicode низ от 4000 знака . Ако дължината надвишава 8000, оставащият низ ще бъде съкратен.

Ограничения на изявлението PRINT

  1. Функцията PRINT връща символен низ или UNICODE символен низ. Следователно, докато конкатенираме типовете данни низ и целочислени, трябва изрично да преобразуваме стойността INT в тип данни char или varchar.
  2. Профилизаторът на 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:

  1. @DBcount съдържа броя на потребителските бази данни. Типът данни е цяло число.
  2. @i съдържа инкременталните стойности. Типът данни е цяло число.
  3. @DBName съдържа стойността на името на базата данни. Типът данни е varchar(200).
  4. @SQLCommand съдържа резервната база данни команда. Типът данни е nvarchar(max).
  5. #Бази данни е временна таблица. Вмъкваме името на потребителските бази данни.

Първо, скриптът създава временна таблица с име #Бази данни и вмъква името на потребителската база данни в него.

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 и илюстрира използването му с практически примери.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предотвратете запазването на промени, които изискват пресъздаване на таблицата, отрицателни ефекти

  2. SIGN() Примери в SQL Server

  3. Как да конвертирате от един формат за дата в друг в SQL Server с помощта на CONVERT()

  4. Изследване на опциите за изчакване на заключване с нисък приоритет в SQL Server 2014 CTP1

  5. Прехвърляне на данни от една база данни в друга база данни