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:
- Drukowanie ciągu lub wartości int za pomocą instrukcji PRINT.
- Używanie PRINT w instrukcji IF…ELSE.
- 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
- 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.
- 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:
- @DBcount przechowuje liczbę baz danych użytkowników. Typ danych to liczba całkowita.
- @i przechowuje wartości przyrostowe. Typ danych to liczba całkowita.
- @DBName przechowuje wartość nazwy bazy danych. Typ danych to varchar(200).
- @SQLCommand przechowuje bazę danych kopii zapasowych Komenda. Typ danych to nvarchar(max).
- #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.