Crear TH
Se creo el sp para que cree las TH para una fecha especifica, esto para meter la llamada del procedimiento al bucle de la simulacion que va iterando por fechas.
Se probó para una fecha específica y este crea los usuarios y las TH de manera correcta.
Se dedicó 40 minutos
Sp creado:
USE [TC]
GO
/****** Object: StoredProcedure [dbo].[CrearTH] Script Date: 12/1/2024 1:11:19 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[CrearTH]
@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 @TH_XML TABLE(
Nombre VARCHAR(64)
, valorDocumentoIdentidad VARCHAR(16)
, fechaNacimiento DATE
, usuario VARCHAR(32)
, password VARCHAR(64))
INSERT INTO @TH_XML(
Nombre
, valorDocumentoIdentidad
, fechaNacimiento
, usuario
, password )
SELECT
XMLDATA.value('@Nombre', 'VARCHAR(64)')
, XMLDATA.value('@ValorDocIdentidad', 'VARCHAR(16)')
, XMLDATA.value('@FechaNacimiento', 'DATE')
, XMLDATA.value('@NombreUsuario', 'VARCHAR(32)')
, XMLDATA.value('@Password', 'VARCHAR(64)')
FROM @XMLDoc.nodes(
'/root/fechaOperacion[@Fecha=sql:variable("@inFechaActual")]/NTH/NTH')
AS T(XMLDATA);
--crear los usuarios y las th en la bd
BEGIN TRAN tcrearTH
INSERT INTO dbo.Usuario (
idTipoUsuario
, nombre
, password)
SELECT
(SELECT id
FROM TipoUsuario
WHERE tipo = 'TarjetaHabiente') AS idTipoUsuario
,usuario
,password
FROM @TH_XML;
INSERT INTO TH (
nombre
, idUsuario
, valorDocumentoIdentidad
, fechaNacimiento)
SELECT
th.Nombre,
u.id,
th.valorDocumentoIdentidad,
th.fechaNacimiento
FROM @TH_XML th
INNER JOIN Usuario u
ON u.nombre = th.usuario AND u.password = th.password;
COMMIT TRAN tcrearTH
END TRY
BEGIN CATCH
IF @@TRANCOUNT >0
BEGIN
ROLLBACK TRAN tcrearTH;
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