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