Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Uma visão geral da instrução PRINT no SQL Server


A instrução SQL PRINT serve para exibir a mensagem definida pelo usuário. Por exemplo, você está desenvolvendo um script com T-SQL Loops e deseja exibir alguma mensagem específica em cada iteração de um loop. Em seguida, você pode usar a instrução PRINT. Ou você pode usá-lo ao desenvolver um script com instruções condicionais. Nesse caso, você garante que a condição avaliada pela instrução execute a etapa correta ou gere a saída correta. A instrução PRINT também pode ser usada para rastrear o processo de uma consulta T-SQL ou um procedimento armazenado ou para retornar a mensagem personalizada.

O artigo atual se concentra nos seguintes casos de uso:
  1. Imprimir uma string ou valor int usando a instrução PRINT.
  2. Usando PRINT na instrução IF…ELSE.
  3. Usando PRINT no loop WHILE.

A sintaxe da instrução PRINT é a seguinte:
Print string | @variable | str_expression
  • cadeia :o valor pode ser um caractere ou uma string Unicode.
  • @variável :o tipo de dados de caractere deve ser do tipo caractere ou de dados de caractere Unicode.
  • str_expression :o valor pode ser uma expressão retornar uma string. Pode ser um valor literal, uma função de string e uma variável.

Quando usamos a instrução PRINT para exibir o valor específico, a saída retorna no painel de mensagens do SQL Server Management Studio.

Observação: A instrução PRINT pode exibir uma string de 8.000 caracteres ou uma string Unicode de 4.000 caracteres . Se o comprimento exceder 8.000, a string restante será truncada.

Limitações da instrução PRINT
  1. A função PRINT retorna uma string de caracteres ou uma string de caracteres UNICODE. Portanto, ao concatenar os tipos de dados string e Integer, devemos converter explicitamente o valor INT para o tipo de dados char ou varchar.
  2. O criador de perfil do SQL Server não captura instruções PRINT.

Exemplo:imprimir o valor da string

Suponha que você queira escrever uma declaração que imprima Hello, World para a tela. O T-SQL deve ser o seguinte:
Print 'Hello World'

Saída:

Para imprimir o valor armazenado no @string variável, precisamos do seguinte código:
declare @String varchar(30)
set @String='Hello World'
Print @String

Saída:

Imprima um valor inteiro usando a instrução PRINT


Use o seguinte script T-SQL:
Print 10

Saída:

Para imprimir o valor do @intvalue parâmetro, use o seguinte script T-SQL. O tipo de dados de @intvalue é um número inteiro.
declare @IntValue Int
set @IntValue = 10
Print @IntValue

Saída:

Você pode executar funções aritméticas básicas usando a instrução PRINT. Suponha que você queira realizar a SOMA de dois valores. Você pode fazer isso adicionando o sinal de mais (+) entre dois valores numéricos:
Print 10+10

Saída:

Imprima mensagens personalizadas usando a instrução PRINT


Suponha que você queira imprimir a hora atual usando a instrução PRINT. Para fazer isso, estamos declarando duas variáveis ​​SQL PRINT chamadas @inputstring e @currentdate . O tipo de dados da @inputstring é varchar(50), e @currentdate é datahora . A consulta é a seguinte:
declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + @currentdate

Saída:

Ocorre um erro. Para corrigir esse erro, devemos converter explicitamente o valor armazenado no @currentdate variável. O script T-SQL deve ser o seguinte:
declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + convert(varchar,@currentdate,103)

Saída:

Usando a instrução PRINT na instrução IF…ELSE


Agora, vamos imprimir Hello World com base na condição especificada no loop IF…ELSE. Se a condição for TRUE, imprima Hello World . Se avaliar FALSE, imprima Hello India .
if (0=0)
print 'Hello World'
else 
Print 'Hello India'

Saída:

Da mesma forma, você pode usar os valores armazenados em uma variável T-SQL para comparar e imprimir a saída.

Eu criei o procedimento armazenado que verifica o status do banco de dados. Se estiver online, imprime ONLINE. Caso contrário, ele imprime ERRO. Estou passando database_id como parâmetro de entrada.

O código T-SQL do procedimento armazenado é o seguinte:
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

Execute o procedimento armazenado:
Exec getDBStatus 5

Saída:

Agora, vamos testar a condição ELSE. Execute o procedimento armazenado usando outro valor de @ ID do banco de dados parâmetro:
use master
go
exec getDBStatus 6

Saída:

Usando a instrução PRINT no loop WHILE


Suponha que você queira imprimir Hello World 10 vezes. Então você pode usar o loop WHILE. Abaixo está o código T-SQL para imprimir hello world várias vezes:
Declare @i int =0
declare @iterations int =10
While (@i<@iterations)
Begin
Print 'Hello World'
set @[email protected]+1
End

Saída:

Agora, vamos desenvolver o script para a consulta T-SQL gerando o backup de todos os bancos de dados de usuários. Para visualizar o progresso do script, estamos usando a instrução PRINT.

No script, usaremos a seguinte var no SQL:
  1. @DBcount contém a contagem de bancos de dados do usuário. O tipo de dados é um número inteiro.
  2. @i mantém os valores incrementais. O tipo de dados é um número inteiro.
  3. @DBName contém o valor do nome do banco de dados. O tipo de dados é varchar(200).
  4. @SQLCommand contém o banco de dados de backup comando. O tipo de dados é nvarchar(max).
  5. #Bancos de dados é uma tabela temporária. Estamos inserindo o nome dos bancos de dados do usuário.

Primeiro, o script cria uma tabela temporária chamada #Bancos de dados e insere o nome do banco de dados do usuário nele.
create table #Databases (name varchar(200))
insert into #Databases select name from sys.databases where database_id>4

Em seguida, ele preenche a contagem do banco de dados do usuário e salva o valor no @DBCount parâmetro:
set @DBCount=(select count(1) from #Databases)

Em seguida, o loop WHILE preenche o nome do Banco de Dados. O loop WHILE é executado até que os valores de @i e @DBCount tornam-se equivalentes.
WHILE (@DBCount>@i)

No loop WHILE, usamos a cláusula TOP para obter o nome do banco de dados do #Databases tabela e salve-a no @DBName variável.
Begin
set @DBName=(select top 1 name from #Databases)

Depois disso, um comando T-SQL dinâmico é criado. Ele define o valor do @DBName parâmetro no SQL dinâmico.
set @SQLCommand = 'Backup database [' [email protected]+'] to disk =''D:\Backup\' + @DBName +'.bak'''

Para verificar se a consulta do banco de dados de backup está correta, adicionamos a instrução PRINT que retorna o @SQLCommand valor variável.
Print @SQLCommand

A próxima instrução incrementa o valor de @I por um e exclui o registro com o nome armazenado no @DBName variável.
delete from #Databases where [email protected]
set @[email protected] + 1
End

O roteiro completo é o seguinte:
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

A saída do script está abaixo:

Podemos usar o script acima para preparar o script específico para fazer backup de todos os bancos de dados do usuário.

Resumo


O artigo explicou a essência e as limitações da instrução PRINT no SQL Server e ilustrou seu uso com exemplos práticos.