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

Declaración RAISERROR de SQL Server con ejemplos simples

La instrucción SQL RAISERROR se utiliza para enviar un mensaje personalizado a la aplicación cliente. También se puede usar para depurar la aplicación y se aplica al mecanismo de manejo de errores.

Sintaxis y parámetros de la sentencia RAISERROR de SQL

La sintaxis de la instrucción SQL RAISERROR es la siguiente:

RAISERROR ( { message_text | message_id | @local_variable }  
    { ,severity ,state }  
    [ ,argument [ ,...n ] ]   
    [ WITH option [ ,...n ] ];

A continuación puede ver la explicación de los parámetros de palabra clave RAISERROR que puede especificar:

texto_mensaje – el mensaje que desea mostrar para un error. Nota: Podemos agregar mensajes personalizados para mostrar la información del error. Véalo explicado en la segunda sección del artículo.

id_mensaje – el id del mensaje de error. Si desea mostrar el mensaje definido por el usuario, debe definirlo. Ver la lista de message_ids en sys.messages DMV .

Consulta

select * from sys.messages

La Salida:

gravedad – la gravedad de un error. El tipo de datos de la gravedad variable es pequeño y los valores están entre 0 y 25. Los valores válidos de gravedad del error son los siguientes:

  • 0-10:mensajes informativos
  • 11-18:errores
  • 19-25:errores fatales

Nota : Si crea un mensaje definido por el usuario, la gravedad especificada en el mensaje definido por el usuario será anulada por la gravedad especificada en la instrucción RAISERROR.

estado – el número de identificación único que puede usar para identificar la sección del código que está causando el error. El tipo de datos del parámetro de estado es pequeño y los valores están entre 0 y 255.

Ahora, pasemos a ejemplos prácticos.

Ejemplo 1:Utilice la instrucción RAISERROR de SQL Server para imprimir la salida

En este ejemplo, puede ver cómo podemos mostrar el mensaje de error o información usando la instrucción RAISERROR.

Suponga que desea mostrar el mensaje después de insertar registros en la tabla. Podemos usar sentencias SQL PRINT o RAISERROR. El siguiente es el código:

SET nocount ON 

INSERT INTO tblpatients 
            (patient_id, 
             patient_name, 
             address, 
             city) 
VALUES     ('OPD00006', 
            'Nimesh Upadhyay', 
            'AB-14, Ratnedeep Flats', 
            'Mehsana') 

RAISERROR ( 'Patient detail added successfully',1,1) 

La Salida:

Como puede ver en la imagen de arriba, el ID del mensaje es 50000 porque es un mensaje definido por el usuario.

Ejemplo 2:declaración SQL RAISERROR con el texto del mensaje dinámico

Ahora, vea cómo podemos crear el texto del mensaje dinámico para la instrucción SQL RAISERROR.

Supongamos que queremos imprimir el ID del paciente en el mensaje. He definido la variable local llamada @PatientID , que contiene el patient_id . Para mostrar el valor de @patientID variable dentro del texto del mensaje, podemos usar el siguiente código:

DECLARE @PatientID VARCHAR(15) 
DECLARE @message NVARCHAR(max) 

SET @PatientID='OPD00007' 
SET @message ='Patient detail added successfully. The OPDID is %s' 

INSERT INTO tblpatients 
            (patient_id, 
             patient_name, 
             address, 
             city) 
VALUES     ('' + @PatientID + '', 
            'Nimesh Upadhyay', 
            'AB-14, Ratnedeep Flats', 
            'Mehsana') 

RAISERROR ( @message,1,1,@patientID) 

La Salida:

Para mostrar la cadena en la declaración RAISERROR, debemos usar las declaraciones de impresión de estilo C.

Como puede ver en la imagen de arriba, a mostrar el parámetro en el texto del mensaje, he usado la opción %s que muestra el valor de cadena del parámetro . Si desea mostrar el parámetro entero , puede utilizar la opción %d .

Usar SQL RAISERROR en el bloque TRY..CATCH

En este ejemplo, estamos agregando SQL RAISERROR en el bloque TRY. Cuando ejecutamos este código, se ejecuta en el bloque CATCH asociado. En el bloque CATCH, mostraremos los detalles del error invocado.

BEGIN try 
    RAISERROR ('Error invoked in the TRY code block.',16,1 ); 
END try 

BEGIN catch 
    DECLARE @ErrorMsg NVARCHAR(4000); 
    DECLARE @ErrSeverity INT; 
    DECLARE @ErrState INT; 

    SELECT @ErrorMsg = Error_message(), 
           @ErrSeverity = Error_severity(), 
           @ErrState = Error_state(); 

    RAISERROR (@ErrorMsg,
               @ErrSeverity,
               @ErrState 
    ); 
END catch;

Por lo tanto, hemos agregado la declaración RAISERROR con la gravedad entre 11 -19. Provoca la ejecución del bloque CATCH.

Dentro del bloque CATCH, estamos mostrando la información del error original usando la sentencia RAISERROR.

La Salida:

Como puede ver, el código ha devuelto la información sobre el error original.

Ahora, comprendamos cómo podemos agregar un mensaje personalizado usando sp_addmessage procedimiento almacenado.

procedimiento almacenado sp_addmessage

Podemos agregar el mensaje personalizado ejecutando sp_addmessages procedimiento almacenado. La sintaxis es:

EXEC Sp_addmessage 
  @msgnum= 70001, 
  @severity=16, 
  @msgtext='Please enter the numeric value', 
  @lang=NULL, 
  @with_log='TRUE', 
  @replace='Replace'; 

@msgnum: Especifique el número de mensaje. El tipo de datos del parámetro es entero. Es un ID de mensaje para el mensaje definido por el usuario.

@gravedad: Especifique el nivel de gravedad del error. Los valores válidos están entre 1 y 25. El tipo de datos del parámetro es smallint.

@texto del mensaje: Especifique el mensaje que desea mostrar. El tipo de datos del parámetro es nvarchar(255), y el valor predeterminado es NULL.

@lang: Especifique el idioma que desea utilizar para mostrar el mensaje de error. El valor predeterminado es NULL.

@with_log: Este parámetro se utiliza para escribir el mensaje en el visor de eventos. Los valores válidos son VERDADERO y FALSO. Si especifica TRUE, el mensaje de error se escribirá en el visor de eventos de Windows. Si elige FALSO, el error no se escribirá en el registro de errores de Windows.

@reemplazar: Si desea reemplazar el mensaje de error existente con un mensaje definido por el usuario y un nivel de gravedad, puede especificar el reemplazo en el procedimiento almacenado.

Suponga que desea crear un mensaje de error que devuelve una calidad no válida error. En la instrucción INSERT, el valor de product_quantity está entre 20 y 100. El mensaje debe tratarse como un error y la gravedad es 16.

Para crear el mensaje, ejecute la siguiente consulta:

USE master;
go 
EXEC Sp_addmessage 
  70001, 
  16, 
  N'Product Quantity must be between 20 and 100.'; 
go

Una vez que se haya agregado el mensaje, ejecute la siguiente consulta para verlo:

USE master 
go 
SELECT * FROM   sys.messages WHERE  message_id = 70001 

La Salida:

Cómo usar mensajes de error definidos por el usuario

Como mencioné anteriormente, debemos usar message_id en la instrucción RAISERROR para los mensajes definidos por el usuario.

Hemos creado un mensaje con el ID de 70001. La instrucción RAISERROR debe ser la siguiente:

USE master 
go 
RAISERROR (70001,16,1 ); 
go 

La Salida:

La instrucción RAISERROR ha devuelto el mensaje definido por el usuario.

procedimiento almacenado sp_dropmessage

El sp_dropmessage El procedimiento almacenado se utiliza para eliminar mensajes definidos por el usuario. La sintaxis es la siguiente:

EXEC Sp_dropmessage @msgnum

En la sintaxis, @msgnum especifica el ID del mensaje que desea eliminar.

Ahora, queremos eliminar el mensaje cuyo ID es 70001 . La consulta es la siguiente:

EXEC Sp_dropmessage 70001 

Una vez que se haya eliminado el mensaje, ejecute la siguiente consulta para verlo:

USE master 
go 
SELECT * FROM   sys.messages WHERE  message_id = 70001 

La Salida:

Como puede ver, el mensaje ha sido eliminado.

Resumen

Por lo tanto, hemos explorado la instrucción RAISERROR, sus parámetros y demostrado su uso en ejemplos prácticos. También hemos aclarado el uso de sp_addmessage y sp_dropmessage procedimientos almacenados. Espero que este artículo te haya brindado información útil para tus objetivos de trabajo.

Siempre nos complace escuchar sus comentarios y tal vez consejos prácticos adicionales si desea compartirlos.