sql >> Base de Datos >  >> RDS >> Sqlserver

Una descripción general de la instrucción PRINT en SQL Server

La instrucción SQL PRINT sirve para mostrar el mensaje definido por el usuario. Por ejemplo, está desarrollando un script con bucles T-SQL y desea mostrar algún mensaje específico en cada iteración de un bucle. Entonces puede usar la instrucción PRINT. O bien, puede usarlo al desarrollar un script con declaraciones condicionales. En ese caso, se asegura de que la condición evaluada por la declaración realice el paso correcto o genere la salida correcta. La declaración PRINT también se puede usar para rastrear el proceso de una consulta T-SQL o un procedimiento almacenado o para devolver el mensaje personalizado.

El artículo actual se centra en los siguientes casos de uso:

  1. Imprimir una cadena o un valor int utilizando la instrucción PRINT.
  2. Usando PRINT en la sentencia IF…ELSE.
  3. Usando PRINT en el bucle WHILE.

La sintaxis de la sentencia PRINT es la siguiente:

Print string | @variable | str_expression
  • cadena :el valor puede ser un carácter o una cadena Unicode.
  • @variable :El tipo de datos de caracteres debe ser tipo de datos de caracteres o Unicode.
  • str_expresión :el valor puede ser una expresión devuelve una cadena. Puede ser un valor literal, una función de cadena y una variable.

Cuando usamos la instrucción PRINT para mostrar el valor específico, la salida regresa al panel de mensajes del estudio de SQL Server Management.

Nota: La instrucción PRINT puede mostrar una cadena de 8000 caracteres o una cadena Unicode de 4000 caracteres . Si la longitud supera los 8000, la cadena restante se truncará.

Limitaciones de la sentencia PRINT

  1. La función IMPRIMIR devuelve una cadena de caracteres o una cadena de caracteres UNICODE. Por lo tanto, al concatenar los tipos de datos de cadena e enteros, debemos convertir explícitamente el valor INT al tipo de datos char o varchar.
  2. El generador de perfiles de SQL Server no captura sentencias PRINT.

Ejemplo:Imprime el valor de la cadena

Suponga que desea escribir una declaración que imprima Hola, mundo a la pantalla El T-SQL debería ser el siguiente:

Print 'Hello World'

Salida:

Para imprimir el valor almacenado en @string variable, necesitamos el siguiente código:

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

Salida:

Imprimir un valor entero usando la sentencia PRINT

Utilice el siguiente script T-SQL:

Print 10

Salida:

Para imprimir el valor de @intvalue parámetro, utilice el siguiente script T-SQL. El tipo de datos de @intvalue es un número entero.

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

Salida:

Puede realizar funciones aritméticas básicas utilizando la sentencia PRINT. Suponga que desea realizar la SUMA de dos valores. Puedes hacerlo agregando el signo más (+) entre dos valores numéricos:

Print 10+10

Salida:

Imprimir mensajes personalizados usando la sentencia PRINT

Suponga que desea imprimir la hora actual usando la instrucción PRINT. Para hacer eso, estamos declarando dos variables SQL PRINT llamadas @inputstring y @fechaactual . El tipo de datos de @inputstring es varchar(50), y @fechaactual es fechahora . La consulta es la siguiente:

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

Salida:

Se produce un error. Para corregir este error, debemos convertir explícitamente el valor almacenado en @currentdate variable. El script T-SQL debe ser el siguiente:

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

Salida:

Uso de la sentencia PRINT en la sentencia IF…ELSE

Ahora imprimamos Hello World basado en la condición especificada en el bucle IF…ELSE. Si la condición se evalúa como VERDADERO, imprima Hello World . Si evalúa FALSO, imprima Hello India .

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

Salida:

De manera similar, puede usar los valores almacenados en una variable T-SQL para comparar e imprimir la salida.

He creado el procedimiento almacenado que comprueba el estado de la base de datos. Si está en línea, imprime EN LÍNEA. De lo contrario, imprime ERROR. Estoy pasando database_id como parámetro de entrada.

El código T-SQL del procedimiento almacenado es el siguiente:

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

Ejecute el procedimiento almacenado:

Exec getDBStatus 5

Salida:

Ahora, probemos la condición ELSE. Ejecute el procedimiento almacenado usando otro valor de @ ID de base de datos parámetro:

use master
go
exec getDBStatus 6

Salida:

Uso de la instrucción PRINT en el ciclo WHILE

Suponga que desea imprimir Hello World 10 veces. Entonces puedes usar el bucle WHILE. A continuación se muestra el código T-SQL para imprimir hola mundo varias veces:

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

Salida:

Ahora, desarrollemos el script para la consulta T-SQL que genera la copia de seguridad de todas las bases de datos de los usuarios. Para ver el progreso del script, usamos la instrucción PRINT.

En el script, usaremos la siguiente var en SQL:

  1. @DBcount contiene el recuento de las bases de datos de los usuarios. El tipo de datos es un número entero.
  2. @yo contiene los valores incrementales. El tipo de datos es un número entero.
  3. @NombreDB contiene el valor del nombre de la base de datos. El tipo de datos es varchar(200).
  4. @SQLCommand contiene la base de datos de respaldo dominio. El tipo de datos es nvarchar(max).
  5. #Bases de datos es una tabla temporal. Estamos insertando el nombre de las bases de datos de usuarios.

Primero, el script crea una tabla temporal llamada #Bases de datos e inserta el nombre de la base de datos del usuario en ella.

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

Luego, completa el recuento de la base de datos de usuarios y guarda el valor en @DBCount parámetro:

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

A continuación, el ciclo WHILE completa el nombre de la base de datos. El bucle WHILE se ejecuta hasta que los valores de @i y @DBCount convertirse en equivalente.

WHILE (@DBCount>@i)

En el bucle WHILE, usamos la cláusula TOP para obtener el nombre de la base de datos de #Databases tabla y guárdela en @DBName variables.

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

Después de eso, se crea un comando T-SQL dinámico. Establece el valor de @DBName parámetro en el SQL dinámico.

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

Para verificar que la consulta de la base de datos de respaldo sea correcta, agregamos la instrucción PRINT que devuelve @SQLCommand valor variable.

Print @SQLCommand

La siguiente instrucción incrementa el valor de @I por uno y elimina el registro con el nombre almacenado en @DBName variables.

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

El guión completo es el siguiente:

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

El resultado del script es el siguiente:

Podemos usar la secuencia de comandos anterior para preparar la secuencia de comandos específica para realizar copias de seguridad de todas las bases de datos de los usuarios.

Resumen

El artículo explicó la esencia y las limitaciones de la instrucción PRINT en SQL Server e ilustró su uso con ejemplos prácticos.