Manejar de forma correcta los errores dentro de tu código TSQL es muy importante para que tu aplicación funcione de forma adecuada.
En el siguiente video te voy a mostrar cual es la forma correcta de hacerlo
USE TEMPDB
GO
CREATE OR ALTER PROC USP_ERROR0
AS
CREATE TABLE #DEMO (VALOR INT)
BEGIN TRAN;
INSERT INTO #DEMO
SELECT 1/0 AS CAUSEANERROR
PRINT 'HOLA'
COMMIT;
SELECT * FROM #DEMO
GO
exec USP_ERROR0
CREATE OR ALTER PROC USP_ERROR1
AS
CREATE TABLE #DEMO (VALOR INT)
BEGIN TRY--DETECT ERRORS
BEGIN TRAN;
INSERT INTO #DEMO
SELECT 1/0 AS CAUSEANERROR
PRINT 'HOLA'
COMMIT;
END TRY
BEGIN CATCH
IF @@TRANCOUNT> 0 ROLLBACK; --CLEANUP AFTER ERROR
THROW;
END CATCH
GO
CREATE OR ALTER PROC USP_ERROR3
AS
--STRUCTURED ERROR HANDLING EXAMPLE
BEGIN TRY--DETECT ERRORS
BEGIN TRAN;
SELECT 1/0 AS CAUSEANERROR;
COMMIT;
END TRY
BEGIN CATCH
IF @@TRANCOUNT> 0 ROLLBACK; --CLEANUP AFTER ERROR
THROW 50001, 'ERROR EN INSERTAR DATO', 1; -- CUSTOM
END CATCH
GO