Solución: Usar el @@ERROR Cuando creo los SPs de actualización o inserción de datos realizo, más o menos, lo siguiente:
CREATE PROCEDURE sp_ejemplo
@param1 integer,
@param2 integer
AS
BEGIN TRANSACTION --Inicia la transacción
--La sentencia de actualización o inserción
update tabla
set campo1 = @param1
from tabla
where campo2 = @param2
IF @@ERROR != 0 --Chequeo la variable @@ERROR
BEGIN
ROLLBACK TRANSACTION --Reversa la transacción si hay error
RETURN
END
ELSE
BEGIN
COMMIT TRANSACTION --Si está correcto, al final, ejecuta la transacción
RETURN
END
GO