Llenado de catalogos
Se hizo el script para llenar los catalogos de la bd. Las cuales son:
- reglas de negocio
- tipos de tcm
- tipos de reglas de negocio
- tipos de movimientos
- usuarios
- tipos de usuarios, admin o tarjeta hambiente
- ticos de cuentas, tcm o tca
Se dedicó 30 minutos para realizarlo. Se usó de referencia este video de Bulk import XML file records in SQL Server table using a sql query
Script:
DECLARE @XMLDoc XML;
-- almacena el contenido del xml de catalogos
SELECT @XMLDoc = CAST(BulkColumn AS XML)
FROM OPENROWSET(BULK 'C:\CatalogosFinal.xml'
, SINGLE_BLOB) AS x;
-- tablas variables
DECLARE @ReglaNegocio_XML TABLE(
Nombre VARCHAR(64)
, TTCM VARCHAR(32)
, TipoRN VARCHAR(64)
, Valor MONEY
)
DECLARE @TipoMov_XML TABLE(
Nombre VARCHAR(64)
, Accion VARCHAR(16)
, AcumulaOperacionesATM VARCHAR(4)
, AcumulaOperacionesVentanilla VARCHAR(4)
)
DECLARE @Usuario_XML TABLE(
Nombre VARCHAR(64)
, Password VARCHAR(64)
, idTipoUsuario INT
)
-- preprocesar los datos
INSERT INTO @ReglaNegocio_XML(
Nombre
, TTCM
, TipoRN
, Valor)
SELECT
XMLDATA.value('@Nombre', 'VARCHAR(64)')
, XMLDATA.value('@TTCM', 'VARCHAR(32)')
, XMLDATA.value('@TipoRN', 'VARCHAR(64)')
, XMLDATA.value('@Valor', 'MONEY')
FROM @XMLDoc.nodes('/root/RN/RN') AS T(XMLDATA);
INSERT INTO @TipoMov_XML(
Nombre
, Accion
, AcumulaOperacionesATM
, AcumulaOperacionesVentanilla)
SELECT
XMLDATA.value('@Nombre', 'VARCHAR(64)')
, XMLDATA.value('@Accion', 'VARCHAR(16)')
, XMLDATA.value('@Acumula_Operacion_ATM', 'VARCHAR(4)')
, XMLDATA.value('@Acumula_Operacion_Ventana', 'VARCHAR(4)')
FROM @XMLDoc.nodes('/root/TM/TM') AS T(XMLDATA);
INSERT INTO @Usuario_XML(
Nombre
, Password
, idTipoUsuario)
SELECT
XMLDATA.value('@Nombre', 'VARCHAR(64)')
, XMLDATA.value('@Password', 'NVARCHAR(64)')
-- 1 admin 2 tarjetaAmbiente
, 1 AS idTipoUsuario
FROM @XMLDoc.nodes('/root/UA/Usuario') AS T(XMLDATA);
-- insertar los datos del xml en las tablas de la bd
INSERT INTO dbo.TipoTCM(Nombre)
SELECT
XMLDATA.value(
'@Nombre'
, 'VARCHAR(64)')
FROM @XMLDoc.nodes('/root/TTCM/TTCM') AS T(XMLDATA);
-- no vienen en catalogos.xml pero se necesita
INSERT INTO dbo.TipoUsuario (Tipo)
VALUES ('Administrador')
, ('TarjetaHabiente');
INSERT INTO Usuario(
Nombre
, Password
, idTipoUsuario)
SELECT
U_XML.Nombre
, U_XML.Password
, 1 AS idTipoUsuario
FROM @Usuario_XML U_XML
INSERT INTO dbo.TipoRN(
Nombre
, Tipo)
SELECT
XMLDATA.value(
'@Nombre'
, 'VARCHAR(64)')
, XMLDATA.value(
'@tipo'
, 'VARCHAR(32)')
FROM @XMLDoc.nodes('/root/TRN/TRN') AS T(XMLDATA);
/* no vienen en el xml pero se necesita para ver si la tf
esta asociada a una tcm o tca */
INSERT INTO dbo.TipoCuenta(Nombre)
VALUES ('TCM')
, ('TCA');
INSERT INTO dbo.ReglaDeNegocio(
idTipoTCM
, idTipoRegla
, Nombre
, Valor)
SELECT
TTCM.id
, TRN.id
, RN.Nombre
, RN.Valor
FROM @ReglaNegocio_XML RN
-- el id del tipo de tcm debe ser de un nombre del tipo
INNER JOIN TipoTCM TTCM ON TTCM.Nombre = RN.TTCM
-- el id del tipo de rn debe ser de un nombre del tipo
INNER JOIN TipoRN TRN ON TRN.Nombre = RN.TipoRN
INSERT INTO dbo.TipoMovimiento(
Nombre
, AcumulaOperacionesVentanilla
, AcumulaOperacionesATM
, accion)
SELECT
TM.Nombre
-- 0 no, 1 si
, CASE WHEN AcumulaOperacionesVentanilla = 'NO'
THEN 0 ELSE 1 END AS AcumulaOperacionesVentanilla
, CASE WHEN AcumulaOperacionesATM = 'NO'
THEN 0 ELSE 1 END AS AcumulaOperacionesATM
, TM.Accion
FROM @TipoMov_XML TM
-- Verificar en las tablas
SELECT * FROM dbo.ReglaDeNegocio;
SELECT * FROM dbo.TipoTCM;
SELECT * FROM dbo.TipoRN;
SELECT * FROM dbo.TipoMovimiento
SELECT * FROM dbo.Usuario;
SELECT * FROM dbo.TipoUsuario;
SELECT * FROM dbo.TipoCuenta;
Comentarios
Publicar un comentario