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
Publicar un comentario