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

Entradas más populares de este blog

CargaXML