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