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

Entradas más populares de este blog

CargaXML

Crear TH