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:
- Imprimir uma string ou valor int usando a instrução PRINT.
- Usando PRINT na instrução IF…ELSE.
- 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
- 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.
- 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:
- @DBcount contém a contagem de bancos de dados do usuário. O tipo de dados é um número inteiro.
- @i mantém os valores incrementais. O tipo de dados é um número inteiro.
- @DBName contém o valor do nome do banco de dados. O tipo de dados é varchar(200).
- @SQLCommand contém o banco de dados de backup comando. O tipo de dados é nvarchar(max).
- #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.