Crear TCM y TCA

 Se creo el sp para crear las tcm y las tca del xml de las operaciones finales. Se sigue la misma idea de llamar este procedimiento cuando se vaya iterando por las fechas.

Tiempo dedicado: 40 minutos

USE [TC]

GO

/****** Object:  StoredProcedure [dbo].[CrearTCs]    Script Date: 12/1/2024 2:05:43 PM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[CrearTCs]

@inFechaActual DATE

, @outCodeResult INT


AS

BEGIN

SET NOCOUNT ON

BEGIN TRY

--declaraciones

DECLARE @XMLDoc XML


-- almacena el contenido del xml de catalogos

SELECT @XMLDoc = CAST(BulkColumn AS XML)

FROM OPENROWSET(BULK 'C:\OperacionesFinal.xml'

, SINGLE_BLOB) AS x;


-- tablas variables

DECLARE @TCM_XML TABLE(

Codigo INT

, tipoTCM VARCHAR(32)

, limiteCredito MONEY

, TH VARCHAR(32))


INSERT INTO @TCM_XML(

Codigo 

, tipoTCM 

, limiteCredito 

, TH )

SELECT

XMLDATA.value('@Codigo', 'INT')

, XMLDATA.value('@TipoTCM', 'VARCHAR(32)')

, XMLDATA.value('@LimiteCredito', 'MONEY')

, XMLDATA.value('@TH', 'VARCHAR(32)')


FROM @XMLDoc.nodes(

'/root/fechaOperacion[@Fecha=sql:variable("@inFechaActual")]/NTCM/NTCM') 

AS T(XMLDATA);


DECLARE @TCA_XML TABLE(

CodigoTCM INT

, CodigoTCA INT

, TH VARCHAR(32))


INSERT INTO @TCA_XML(

CodigoTCM 

, CodigoTCA 

, TH )

SELECT

XMLDATA.value('@CodigoTCM', 'INT')

, XMLDATA.value('@CodigoTCA', 'INT')

, XMLDATA.value('@TH', 'VARCHAR(32)')


FROM @XMLDoc.nodes(

'/root/fechaOperacion[@Fecha=sql:variable("@inFechaActual")]/NTCA/NTCA') 

AS T(XMLDATA);


--crear los tcm y tca

BEGIN TRAN tcrearTCs


INSERT INTO dbo.TCM (

idTH

, idTipoTCM

, codigo

, LimiteCredito

, fechaCreacion

, saldoActual)

        SELECT

            th.id 

            , tipo.id 

            , tcm.Codigo

            , tcm.limiteCredito

, @inFechaActual

, 0

FROM @TCM_XML tcm

        -- verificar que th sea el valordocidentidad de una th

INNER JOIN dbo.TH th ON th.valorDocumentoIdentidad = tcm.TH

        -- verificar que el tipo de tcm sea una de las catalogo para asignar id

        INNER JOIN dbo.TipoTCM tipo ON tipo.nombre = tcm.tipoTCM;


INSERT INTO dbo.TCA (

idTH

, idTCM

, codigoTCA

, fechaCreacion)

        SELECT

            th.id 

            , tcm.id 

            , tca.CodigoTCA

, @inFechaActual

FROM @TCA_XML tca

        -- verificar que th sea el valordocidentidad de una th

INNER JOIN dbo.TH th ON th.valorDocumentoIdentidad = tca.TH

        -- conseguir el id de la tcm asociada

        INNER JOIN dbo.TCM tcm ON tcm.codigo = tca.codigoTCM;


COMMIT TRAN tcrearTCs



END TRY

BEGIN CATCH

IF @@TRANCOUNT >0

BEGIN

ROLLBACK TRAN tcrearTCs;

END;

INSERT INTO [dbo].[DBError] VALUES (

SUSER_SNAME(),

ERROR_NUMBER(),

ERROR_STATE(),

ERROR_SEVERITY(),

ERROR_LINE(),

ERROR_PROCEDURE(),

ERROR_MESSAGE(),

GETDATE()

);

SET @outCodeResult = 50005;   -- error en BD

END CATCH

SET NOCOUNT OFF;


END;

Comentarios

Entradas más populares de este blog

CargaXML

Crear TH