Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przegląd instrukcji PRINT w SQL Server

Instrukcja SQL PRINT służy do wyświetlania komunikatu zdefiniowanego przez użytkownika. Na przykład tworzysz skrypt z pętlami T-SQL i chcesz wyświetlać określony komunikat przy każdej iteracji pętli. Następnie możesz użyć instrukcji PRINT. Lub możesz go użyć podczas tworzenia skryptu z instrukcjami warunkowymi. W takim przypadku upewnij się, że warunek oceniany przez instrukcję wykonuje poprawny krok lub generuje poprawne dane wyjściowe. Instrukcja PRINT może być również używana do śledzenia procesu zapytania T-SQL lub procedury składowanej lub do zwrócenia dostosowanego komunikatu.

Obecny artykuł skupia się na następujących przypadkach użycia:

  1. Drukowanie ciągu lub wartości int za pomocą instrukcji PRINT.
  2. Używanie PRINT w instrukcji IF…ELSE.
  3. Korzystanie z PRINT w pętli WHILE.

Składnia instrukcji PRINT jest następująca:

Print string | @variable | str_expression
  • ciąg :Wartość może być znakiem lub ciągiem Unicode.
  • @zmienna :Typ danych znakowych musi być typem danych znakowym lub znakowym Unicode.
  • str_expression :wartość może być wyrażeniem zwracać ciąg. Może to być wartość dosłowna, funkcja łańcuchowa i zmienna.

Kiedy używamy instrukcji PRINT do wyświetlenia określonej wartości, dane wyjściowe są zwracane w okienku komunikatów w SQL Server Management studio.

Uwaga: Wyrażenie PRINT może wyświetlać ciąg znaków o długości 8000 znaków lub ciąg Unicode o długości 4000 znaków . Jeśli długość przekracza 8000, pozostały ciąg zostanie obcięty.

Ograniczenia oświadczenia PRINT

  1. Funkcja PRINT zwraca ciąg znaków lub ciąg znaków UNICODE. Dlatego, łącząc typy danych typu string i Integer, musimy jawnie przekonwertować wartość INT na typ danych char lub varchar.
  2. Profiler SQL Server nie przechwytuje instrukcji PRINT.

Przykład:wydrukuj wartość ciągu

Załóżmy, że chcesz napisać oświadczenie, które wyświetla Hello, World na ekran. T-SQL powinien wyglądać następująco:

Print 'Hello World'

Wyjście:

Aby wydrukować wartość zapisaną w @string zmiennej, potrzebujemy następującego kodu:

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

Wyjście:

Wydrukuj wartość całkowitą za pomocą instrukcji PRINT

Użyj następującego skryptu T-SQL:

Print 10

Wyjście:

Aby wydrukować wartość @intvalue użyj następującego skryptu T-SQL. Typ danych @intvalue jest liczbą całkowitą.

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

Wyjście:

Za pomocą instrukcji PRINT można wykonywać podstawowe funkcje arytmetyczne. Załóżmy, że chcesz wykonać SUMA dwóch wartości. Możesz to zrobić, dodając znak plus (+) między dwiema wartościami liczbowymi:

Print 10+10

Wyjście:

Drukuj niestandardowe wiadomości za pomocą instrukcji PRINT

Załóżmy, że chcesz wydrukować aktualny czas za pomocą instrukcji PRINT. W tym celu deklarujemy dwie zmienne SQL PRINT o nazwie @inputstring i @currentdate . Typ danych @inputstring to varchar(50), i @currentdate to data i godzina . Zapytanie jest następujące:

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

Wyjście:

Wystąpił błąd. Aby naprawić ten błąd, musimy jawnie przekonwertować wartość zapisaną w @currentdate zmienny. Skrypt T-SQL powinien wyglądać następująco:

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

Wyjście:

Korzystanie z instrukcji PRINT w instrukcji IF…ELSE

Teraz wydrukujmy Hello World na podstawie warunku określonego w pętli IF…ELSE. Jeśli warunek ma wartość TRUE, wydrukuj Hello World . Jeśli otrzyma wartość FALSE, wydrukuj Hello India .

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

Wyjście:

Podobnie możesz użyć wartości przechowywanych w zmiennej T-SQL, aby porównać i wydrukować dane wyjściowe.

Stworzyłem procedurę składowaną, która sprawdza stan bazy danych. Jeśli jest online, drukuje ONLINE. W przeciwnym razie wypisuje BŁĄD. Przekazuję database_id jako parametr wejściowy.

Kod T-SQL procedury składowanej jest następujący:

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

Wykonaj procedurę składowaną:

Exec getDBStatus 5

Wyjście:

Teraz przetestujmy warunek ELSE. Uruchom procedurę składowaną, używając innej wartości @ ID bazy danych parametr:

use master
go
exec getDBStatus 6

Wyjście:

Korzystanie z instrukcji PRINT w pętli WHILE

Załóżmy, że chcesz wydrukować Hello World 10 razy. Następnie możesz użyć pętli WHILE. Poniżej znajduje się kod T-SQL do wielokrotnego drukowania hello world:

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

Wyjście:

Teraz opracujmy skrypt dla zapytania T-SQL generującego kopię zapasową wszystkich baz danych użytkowników. Aby zobaczyć postęp skryptu, używamy instrukcji PRINT.

W skrypcie użyjemy następującej zmiennej w SQL:

  1. @DBcount przechowuje liczbę baz danych użytkowników. Typ danych to liczba całkowita.
  2. @i przechowuje wartości przyrostowe. Typ danych to liczba całkowita.
  3. @DBName przechowuje wartość nazwy bazy danych. Typ danych to varchar(200).
  4. @SQLCommand przechowuje bazę danych kopii zapasowych Komenda. Typ danych to nvarchar(max).
  5. #Bazy danych jest tabelą tymczasową. Wstawiamy nazwy baz danych użytkowników.

Najpierw skrypt tworzy tabelę tymczasową o nazwie #Bazy danych i wstawia do niego nazwę bazy danych użytkownika.

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

Następnie wypełnia licznik bazy danych użytkowników i zapisuje wartość w @DBCount parametr:

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

Następnie pętla WHILE wypełnia nazwę Bazy Danych. Pętla WHILE jest wykonywana aż do wartości @i i @DBCount stają się równoważne.

WHILE (@DBCount>@i)

W pętli WHILE używamy klauzuli TOP, aby uzyskać nazwę bazy danych z #Bazy danych tabeli i zapisz ją w @DBName zmienna.

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

Następnie tworzone jest dynamiczne polecenie T-SQL. Ustawia wartość @DBName parametr w dynamicznym SQL.

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

Aby sprawdzić, czy zapytanie o kopię zapasową bazy danych jest poprawne, dodaliśmy instrukcję PRINT, która zwraca @SQLCommand wartość zmiennej.

Print @SQLCommand

Następna instrukcja zwiększa wartość @I o jeden i usuwa rekord z nazwą zapisaną w @DBName zmienna.

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

Pełny skrypt wygląda następująco:

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

Wynik skryptu znajduje się poniżej:

Możemy użyć powyższego skryptu, aby przygotować konkretny skrypt do tworzenia kopii zapasowych wszystkich baz danych użytkowników.

Podsumowanie

W artykule wyjaśniono istotę i ograniczenia instrukcji PRINT na serwerze SQL Server i zilustrowano jego użycie na praktycznych przykładach.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać DOWOLNEGO / NIEKTÓREGO operatora logicznego w SQL Server — samouczek SQL Server / TSQL, część 127

  2. SQL Server dodaje automatyczny klucz podstawowy do istniejącej tabeli

  3. Jak podzielić ciąg znaków za pomocą ogranicznika za pomocą T-SQL?

  4. Standardowe ciągi formatu daty/godziny obsługiwane przez FORMAT() w SQL Server

  5. Magazyn zapytań SQL Server