Bases de datos

SQL Server

Interrupción de ejecución de script por método RAISERROR

Última actualización: 21-09-2022 21:10

Por azares de la vida alguna veces me he topado con la necesidad de ejecutar scripts SQL en MSSQL Server haciendo que de alguna forma la ejecución se interrumpa si se detecta alguna causa para detener el script.

Lo normal era poner condiciones en el script con IF THEN... pero han habido casos en los que no es tan fácil hacer que el script se interrumpa porque los comandos van obligadamente en segmentos separados de ejecución del script.

Así que buscando por la red me encontré en este enlace https://stackoverflow.com/a/804811 información y un ejemplo de cómo interrumpir la ejecución de un script con el método RAISEVENT.

Documentación oficial

Encontrada en este enlace: https://learn.microsoft.com/en-us/sql/t-sql/language-elements/raiserror-transact-sql.

Raiserror()

RAISERROR ( { msg_id | msg_str | @local_variable }
    { , severity, state }
    [ , argument [ , ...n ] ] )
    [ WITH option [ , ...n ] ]

Resumiendo, al escribir esa línea "raiserror('Oh no a fatal error', 20, -1) with log" se consigue que al momento de ejecutar el script solamente se ejecuta el "primer print" pero no el segundo:

print 'Primera impresión'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'Segunda impresión

Detalles importantes



use [master];
go
 
if (not db_name() = 'master') raiserror('La base de datos MASTER no se ha podido poner en uso', 20, -1) with log
go
 
if not isnull((select database_id from sys.databases where name = 'dbTEST'), -1) = -1 drop database dbTEST;
go
 
if not isnull((select database_id from sys.databases where name = 'dbTEST'), -1) = -1 raiserror('La base de datos dbTEST no se ha podido eliminar', 20, -1) with log
go
 
create database dbTEST WITH CATALOG_COLLATION = DATABASE_DEFAULT;
go
 
use [dbTEST];
go
 
if (not db_name() = 'dbTEST') raiserror('La base de datos dbTEST no se ha podido poner en uso', 20, -1) with log
go
 
 

 

Política de Privacidad

Última actualización: 23 de diciembre de 2024

 X 

Tu privacidad es importante para nosotros. En esta política de privacidad, explicamos qué información recopilamos cuando visitas nuestro sitio web y cómo utilizamos esa información.

1. Información que recopilamos

Este sitio no recopila información personal de los usuarios, excepto cuando un usuario elige voluntariamente comunicarse a través del formulario de contacto. En ese caso, los datos proporcionados (como tu nombre y correo electrónico) se utilizarán únicamente para responder a tu consulta.

2. Uso de Cookies

Este sitio web utiliza una única cookie esencial llamada PHPSESSID.

No usamos cookies de análisis ni de seguimiento.

3. Seguridad de los datos

Adoptamos medidas técnicas y organizativas razonables para proteger cualquier información que compartas con nosotros contra el acceso no autorizado, pérdida o alteración.

4. Enlaces a sitios de terceros

Nuestro sitio web puede contener enlaces a otros sitios web. No somos responsables de las prácticas de privacidad ni del contenido de dichos sitios.

5. Cambios en esta política de privacidad

Nos reservamos el derecho de actualizar esta política de privacidad en cualquier momento. Cualquier cambio será publicado en esta misma página e incluirá la fecha de la última actualización.

6. Contacto

Si tienes preguntas o inquietudes sobre esta política de privacidad, puedes comunicarte con nosotros a través de la página de contacto disponible en este sitio web.

7. Cumplimiento con Normativas Internacionales de Privacidad

Nuestro sitio web cumple con las principales regulaciones internacionales de protección de datos personales para garantizar la privacidad y seguridad de los usuarios. Esto incluye, pero no se limita a, las siguientes leyes:

Si tienes preguntas o dudas sobre el cumplimiento de estas leyes, no dudes en ponerte en contacto conmigo a través de la página de contacto de este sitio web.