Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Una panoramica dell'istruzione PRINT in SQL Server

L'istruzione SQL PRINT serve a visualizzare il messaggio definito dall'utente. Ad esempio, stai sviluppando uno script con cicli T-SQL e desideri visualizzare un messaggio specifico su ogni iterazione di un ciclo. Quindi puoi usare l'istruzione PRINT. Oppure puoi usarlo quando sviluppi uno script con istruzioni condizionali. In tal caso, ci si assicura che la condizione valutata dall'istruzione esegua il passaggio corretto o generi l'output corretto. L'istruzione PRINT può essere utilizzata anche per tenere traccia del processo di una query T-SQL o di una procedura memorizzata o per restituire il messaggio personalizzato.

L'articolo corrente si concentra sui seguenti casi d'uso:

  1. Stampa di una stringa o di un valore int utilizzando l'istruzione PRINT.
  2. Utilizzo di PRINT nell'istruzione IF...ELSE.
  3. Utilizzo di PRINT nel ciclo WHILE.

La sintassi dell'istruzione PRINT è la seguente:

Print string | @variable | str_expression
  • stringa :Il valore può essere un carattere o una stringa Unicode.
  • @variabile :il tipo di dati carattere deve essere un tipo di dati carattere o Unicode.
  • str_expression :il valore può essere un'espressione restituisce una stringa. Può essere un valore letterale, una funzione stringa e una variabile.

Quando utilizziamo l'istruzione PRINT per visualizzare il valore specifico, l'output viene restituito nel riquadro dei messaggi di SQL Server Management Studio.

Nota: L'istruzione PRINT può visualizzare una stringa lunga 8000 caratteri o una stringa Unicode lunga 4000 caratteri . Se la lunghezza supera 8000, la stringa rimanente verrà troncata.

Limiti dell'istruzione PRINT

  1. La funzione PRINT restituisce una stringa di caratteri o una stringa di caratteri UNICODE. Pertanto, durante la concatenazione dei tipi di dati string e Integer, dobbiamo convertire in modo esplicito il valore INT nel tipo di dati char o varchar.
  2. Il profiler di SQL Server non acquisisce le istruzioni PRINT.

Esempio:stampa il valore della stringa

Supponiamo di voler scrivere una dichiarazione che stampa Hello, World allo schermo. Il T-SQL dovrebbe essere il seguente:

Print 'Hello World'

Uscita:

Per stampare il valore memorizzato nella @string variabile, abbiamo bisogno del seguente codice:

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

Uscita:

Stampa un valore intero utilizzando l'istruzione PRINT

Utilizzare il seguente script T-SQL:

Print 10

Uscita:

Per stampare il valore di @intvalue parametro, utilizzare il seguente script T-SQL. Il tipo di dati di @intvalue è un numero intero.

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

Uscita:

È possibile eseguire funzioni aritmetiche di base utilizzando l'istruzione PRINT. Supponiamo di voler eseguire la SOMMA di due valori. Puoi farlo aggiungendo il segno più (+) tra due valori numerici:

Print 10+10

Uscita:

Stampa messaggi personalizzati utilizzando l'istruzione PRINT

Si supponga di voler stampare l'ora corrente utilizzando l'istruzione PRINT. Per fare ciò, stiamo dichiarando due variabili SQL PRINT denominate @inputstring e @currentdate . Il tipo di dati di @inputstring è varchar(50), e @currentdate è data e ora . La query è la seguente:

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

Uscita:

Si verifica un errore. Per correggere questo errore, dobbiamo convertire in modo esplicito il valore memorizzato in @currentdate variabile. Lo script T-SQL dovrebbe essere il seguente:

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

Uscita:

Utilizzo dell'istruzione PRINT nell'istruzione IF...ELSE

Ora stampiamo Hello World in base alla condizione specificata nel ciclo IF…ELSE. Se la condizione restituisce TRUE, stampa Hello World . Se restituisce FALSE, stampa Hello India .

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

Uscita:

Allo stesso modo, puoi utilizzare i valori memorizzati in una variabile T-SQL per confrontare e stampare l'output.

Ho creato la stored procedure che controlla lo stato del database. Se è online, stampa ONLINE. Altrimenti, stampa ERRORE. Sto superando database_id come parametro di input.

Il codice T-SQL della procedura memorizzata è il seguente:

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

Eseguire la procedura memorizzata:

Exec getDBStatus 5

Uscita:

Ora, testiamo la condizione ELSE. Esegui la procedura memorizzata utilizzando un altro valore di @ ID database parametro:

use master
go
exec getDBStatus 6

Uscita:

Utilizzo dell'istruzione PRINT nel ciclo WHILE

Supponiamo di voler stampare Hello World 10 volte. Quindi puoi usare il ciclo WHILE. Di seguito è riportato il codice T-SQL per stampare Hello World più volte:

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

Uscita:

Ora, sviluppiamo lo script per la query T-SQL che genera il backup di tutti i database degli utenti. Per visualizzare l'avanzamento dello script, utilizziamo l'istruzione PRINT.

Nello script, utilizzeremo la seguente var in SQL:

  1. @DBcount contiene il conteggio dei database degli utenti. Il tipo di dati è un numero intero.
  2. @i mantiene i valori incrementali. Il tipo di dati è un numero intero.
  3. @NomeDB contiene il valore del nome del database. Il tipo di dati è varchar(200).
  4. @ComandoSQL contiene il database di backup comando. Il tipo di dati è nvarchar(max).
  5. #Database è un tavolo temporaneo. Stiamo inserendo il nome dei database degli utenti.

Innanzitutto, lo script crea una tabella temporanea denominata #Database e vi inserisce il nome del database utente.

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

Quindi, popola il conteggio del database utente e salva il valore in @DBCount parametro:

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

Successivamente, il ciclo WHILE popola il nome del database. Il ciclo WHILE viene eseguito fino ai valori di @i e @DBCount diventare equivalente.

WHILE (@DBCount>@i)

Nel ciclo WHILE, utilizziamo la clausola TOP per ottenere il nome del database dai #Database tabella e salvarla in @DBName variabile.

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

Successivamente, viene creato un comando T-SQL dinamico. Imposta il valore di @DBName parametro nell'SQL dinamico.

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

Per verificare che la query del database di backup sia corretta, abbiamo aggiunto l'istruzione PRINT che restituisce @SQLCommand valore variabile.

Print @SQLCommand

L'istruzione successiva incrementa il valore di @I di uno ed elimina il record con il nome memorizzato in @DBName variabile.

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

Lo script completo è il seguente:

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

L'output dello script è il seguente:

Possiamo utilizzare lo script sopra per preparare lo script specifico per il backup di tutti i database utente.

Riepilogo

L'articolo ha spiegato l'essenza e le limitazioni dell'istruzione PRINT su SQL Server e ne ha illustrato l'utilizzo con esempi pratici.