try transaction example espaƱol error custom catch tsql error-handling raiserror

tsql - example - transaction sql try catch



TRY y RAISERROR en T-SQL (3)

Creo que debe generar un error con un nivel de gravedad superior a 10 para que se capture, por ejemplo

RAISERROR (''Errors found'', 11, 2) WITH SETERROR

Tener un pequeño problema y preguntarme si los estoy usando correctamente.

En mi script SQL es tener

BEGIN TRY // check some information and if there are certains errors RAISERROR (''Errors found, please fix these errors and retry'', 1, 2) WITH SETERROR // Complete normal process if no errors encountered above PRINT ''IMPORT SUCCEEDED'' END TRY BEGIN CATCH PRINT ''IMPORT ABORTED. ERRORS ENCOUNTERED'' END CATCH

Sin embargo, esto encuentra un error y luego continúa con el resto del script. ¿Qué me estoy perdiendo? ¡Gracias!


Es porque la gravedad de RAISERROR no es lo suficientemente alta, debe estar entre 11 y 19, como se describe aquí

p.ej

RAISERROR (''Errors found, please fix these errors and retry'', 16, 2) WITH SETERROR


Desde MSDN

gravedad

Es el nivel de gravedad definido por el usuario asociado con este mensaje. Los niveles de gravedad de 0 a 18 pueden ser utilizados por cualquier usuario. Los niveles de gravedad del 19 al 25 solo los utilizan los miembros de la función de servidor fijo sysadmin. Para niveles de gravedad del 19 al 25, se requiere la opción WITH LOG.

Precaución Los niveles de severidad de 20 a 25 se consideran fatales. Si se encuentra un nivel de gravedad fatal, la conexión del cliente finaliza después de recibir el mensaje, y el error se registra en el registro de errores y en el registro de la aplicación.

Pruebe esto en su lugar:

RAISERROR (''Errors found, please fix these errors and retry'', 1, 2) WITH SETERROR RETURN