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

SQL Server:volver a generar la excepción con el número de excepción original

Es posible que pueda volver a lanzarlo así:

..
END TRY
BEGIN CATCH
    DECLARE @errnum int;
    SELECT @errnum = ERROR_NUMBER();
    RAISERROR (@errnum, 16, 1);
END CATCH

Sin embargo, lo más probable es que pierda el significado debido a los marcadores de posición %s, etc. en las filas de sys.messages para ERROR_NUMBER()

Podría hacer algo como esto para incluir el número y volver a enviar el mensaje original

..
END TRY
BEGIN CATCH
    DECLARE @errnum nchar(5), @errmsg nvarchar(2048);
    SELECT
        @errnum = RIGHT('00000' + ERROR_NUMBER(), 5),
        @errmsg = @errnum + ' ' + ERROR_MESSAGE();
    RAISERROR (@errmsg, 16, 1);
END CATCH

Los primeros 5 caracteres son el número original.

Pero si tiene un código anidado, terminará con "00123 00456 Texto de error".

Personalmente, solo trato con números de excepción de SQL para separar mis errores (50000) de los errores del motor (por ejemplo, parámetros faltantes) donde mi código no se ejecuta.

Finalmente, podría pasarle el valor devuelto.

Hice una pregunta sobre esto:Manejo de errores de SQL Server:excepciones y el contrato base de datos-cliente