viernes, 25 de agosto de 2017

SQL - Transacciones y errores

USE [leaseoper]
GO

/****** Object:  StoredProcedure [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]    Script Date: 08/25/2017 17:43:58 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]
GO

USE [leaseoper]
GO

/****** Object:  StoredProcedure [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]    Script Date: 08/25/2017 17:43:58 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

/*
-- =============================================
 Author:        Joel Castillo
 Create date: 25-08-2017
 Description: Obtiene bienes que pueden ser reemplazados   
 Ejecución:
            --salta error
            leaseoper..pa_lo_sel_bienes_pozo_solicitud_reemplazo 17
            --trae bienes
            leaseoper..pa_lo_sel_bienes_pozo_solicitud_reemplazo 333

 Utilizado en: /Paginas/AdmContratos/ReemplazoBienPorGarantia/SolicitudReemplazoBien.aspx
-- =============================================
*/
CREATE PROCEDURE [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]
@operacion NUMERIC(20,0)
AS
BEGIN

BEGIN TRANSACTION
BEGIN TRY
----------------------------------------------
--VARIABLES
----------------------------------------------
DECLARE @estado_operacion TINYINT
       ,@msg_error VARCHAR(MAX)


----------------------------------------------
--VALIDACIONES
----------------------------------------------

SELECT @estado_operacion = ISNULL(estado_operacion,99)
FROM leaseoper..t_contratos
WHERE operacion = @operacion

IF(@estado_operacion NOT IN (1,2))
BEGIN 
--CAE AL CATCH
 RAISERROR('Operación debe estar Vigente...',16,1)
END

----------------------------------------------
--SALIDA
----------------------------------------------

SELECT d.cod_material
      ,d.num_material
      ,d.descripcion
      ,d.rut_proveedor
      ,d.num_factura
      ,d.fecha_compra_mat
      ,d.valor_libro_inicial_mat
      ,d.cod_est_mat
      ,d.cod_rubro
      ,d.cod_rubro_especifico
      ,(SELECT ISNULL(r.descripcion,'')
       FROM leasecom..p_rubros_especificos r
       WHERE r.cod_rubro = d.cod_rubro AND r.cod_rubro_especifico = d.cod_rubro_especifico) AS descripcion_rubro      
FROM  leaseoper..t_bienes_detalle d
WHERE operacion = @operacion


COMMIT TRANSACTION
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
--RESCATA ERROR Y LO MUESTRA
    SET @msg_error = (SELECT CONVERT(varchar(max), ERROR_MESSAGE()))
     RAISERROR (@msg_error,16,1)
     RETURN
END CATCH
   
END

GO



No hay comentarios:

Publicar un comentario