Segunda reunión



Registro 2 (aprox 5 horas)

Al tener los datos de prueba decidimos reunirnos para comenzar a montar la base ese mismo día después de terminar la base, se crearon los store procedures que obtienen los datos de los xml basados en los que el profesor recomendó. No fué muy dificil adaptar los datos, porque ya se sabía como sacarlos del xml y lo demás era sólo hacer los insert iterativos a las tablas correspondientes teniendo en cuenta teniendo en cuenta la dependencia de los datos.

Capturas del diagrama de clases:






Pruebas del store procedure:


--Script para la simulación de ingreso de datos

--Se declara la variable con los datos del xml de datos de prueba
DECLARE @XML XML
SET @XML = (
  SELECT *
  FROM OPENROWSET(BULK 'C:\Users\casa\Desktop\Data3.xml', SINGLE_BLOB) AS data
)

DECLARE @handle INT 
DECLARE @PrepareXmlStatus INT 

EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @XML 
--Se termina cargar la variable del XML


--Se declaran variables tabla para iterar por los datos
DECLARE @TAbonado table (sec int identity(1,1), Nombre varchar(50))
DECLARE @TMunicipalidad table (sec int identity(1,1), Nombre varchar(50), DiaEmite int, DiaLimite int, TasaInteres float, ValorMAgua float)
DECLARE @TTipoServicio table (sec int identity(1,1), Nombre varchar(50), Valor float, Variable bit)
DECLARE @TPropiedades table (sec int identity(1,1), NumeroFinca int, IdMunicipalidad int, IdAbonado int, Descripcion varchar(100), Valor int, CodigoPostal int)
DECLARE @TServicioXPropiedad table (sec int identity(1,1), NumeroFinca int, IDServicio int, FechaContratacion datetime)
DECLARE @TConsumoAgua table (sec int identity(1,1), NumeroFinca int, FechaLectura datetime, QM3 int)
DECLARE @TRecibos table (sec int identity(1,1), NumeroFinca int, FechaEmision datetime, FechaLimite datetime, FechaPagado datetime)

--Se cargan los datos del xml a las variable tabla

INSERT @TAbonado (Nombre)
SELECT Nombre
FROM OPENXML(@handle, 'XML/Abonado/dbo.Abonado') WITH (Nombre varchar(50))

INSERT @TMunicipalidad (Nombre, DiaEmite, DiaLimite, TasaInteres, ValorMAgua)
SELECT Nombre, DiaEmite, DiaLimite, TasaInteres, ValorMAgua
FROM OPENXML(@handle, 'XML/Municipalidades/dbo.Municipalidades') WITH (Nombre varchar(50), DiaEmite int, DiaLimite int, TasaInteres float, ValorMAgua float)

INSERT @TTipoServicio (Nombre, Valor, Variable)
SELECT Nombre, Valor, Variable
FROM OPENXML(@handle, 'XML/TipoServicio/dbo.TipoServicio') WITH (Nombre varchar(50), Valor float, Variable bit)

INSERT @TPropiedades (NumeroFinca, IdMunicipalidad, IdAbonado, Descripcion, Valor, CodigoPostal)
SELECT NumeroFinca, IdMunicipalidad, IdAbonado, Descripcion, Valor, CodigoPostal
FROM OPENXML(@handle, 'XML/Propiedades/dbo.Propiedades') WITH (NumeroFinca int, IdMunicipalidad int, IdAbonado int, Descripcion varchar(100), Valor int, CodigoPostal int)

INSERT @TServicioXPropiedad (NumeroFinca, IDServicio, FechaContratacion)
SELECT NumeroFinca, IDServicio, FechaContratacion
FROM OPENXML(@handle, 'XML/ServicioXPropiedad/dbo.ServicioXPropiedad') WITH (NumeroFinca int, IDServicio int, FechaContratacion datetime)

INSERT @TConsumoAgua (NumeroFinca, FechaLectura, QM3)
SELECT NumeroFinca, FechaLectura, QM3
FROM OPENXML(@handle, 'XML/ConsumoAgua/dbo.ConsumoAgua') WITH (NumeroFinca int, FechaLectura datetime, QM3 int)

INSERT @TRecibos (NumeroFinca, FechaEmision, FechaLimite, FechaPagado)
SELECT NumeroFinca, FechaEmision, FechaLimite, FechaPagado
FROM OPENXML(@handle, 'XML/Recibos/dbo.Recibos') WITH (NumeroFinca int, FechaEmision datetime, FechaLimite datetime, FechaPagado datetime)



--Se declaran tablas temporales para iterar en registros asociados a otra tabla
--CREATE TABLE dbo.#TGruposPorPeriodo (sec int identity(0,1), idGrupo int)
--CREATE TABLE dbo.#TRubrosPorGrupo (sec int identity(0,1), idRubroPorGrupo int)
--CREATE TABLE dbo.#TEstudiantesPorGrupo (sec int identity(0,1), idEstudiantePorGrupo int)
--CREATE TABLE dbo.#TEvaluacionesPorPeriodo (sec int identity(0,1), idEvaluacionPorPeriodo int)
--CREATE TABLE dbo.#TEvaluacionPorEstudiantesPorEvaluacion (sec int identity(0,1), idEvaluacionPorEstudiante int)





--Se declaran las variables a utilizar para iterar en tres niveles
DECLARE @low_abonado int
DECLARE @high_abonado int

DECLARE @low_tipo_servicio int
DECLARE @high_tipo_servicio int

DECLARE @low1 int
DECLARE @high1 int
DECLARE @low2 int
DECLARE @high2 int
DECLARE @low3 int
DECLARE @high3 int


--Se declaran variable extra a utilizar en el proceso de insertar tablas con herencia
DECLARE @insertedId int
DECLARE @rubro_fijo bit
DECLARE @tableIdRubro table (id int)
DECLARE @cantidad int

DECLARE @insertedIdE int
DECLARE @evaluacion_fija bit
DECLARE @tableIdEvaluacion table (id int)
DECLARE @porcentaje real


--Se ingresan los abonados, estos son independientes y por eso están fuera del la iteración principal
Set @low_abonado = 1
Select @high_abonado = max(T.sec) from @TAbonado T

Print 'insertando abonados----------------------------------------------------------------------------'
while @low_abonado <= @high_abonado
BEGIN

--Inserta abonado-----------------------------------------------------
INSERT Municipalidades.dbo.Abonado (Nombre)
SELECT Nombre
FROM @TAbonado T where T.sec = @low_abonado
SET @low_abonado = @low_abonado + 1
END
-------------------------------------------------------------------------------

--Se ingresan los tipos de servicio, estos son independientes y por eso están fuera del la iteración principal
Set @low_tipo_servicio = 1
Select @high_tipo_servicio = max(T.sec) from @TTipoServicio T

Print 'insertando tipos de servicio--------------------------------------------------------------------'
while @low_tipo_servicio <= @high_tipo_servicio
BEGIN

--Inserta tipos de servicio-----------------------------------------------------
INSERT Municipalidades.dbo.TipoServicio (Nombre, Valor, Variable)
SELECT Nombre, Valor, Variable
FROM @TTipoServicio T where T.sec = @low_tipo_servicio
SET @low_tipo_servicio = @low_tipo_servicio + 1
END
-------------------------------------------------------------------------------



--Se itera por Municipalidades
Set @low1 = 1
Select @high1 = max(M.sec) from @TMunicipalidad M

while @low1 <= @high1
BEGIN
Print 'inserta Municipalidad------------------------------------------------------------------------'
--Inserta municipalidad-----------------------------------------------------
INSERT Municipalidades.dbo.Municipalidad (Nombre, DiaEmite, DiaLimite, TasaInteres, ValorMAgua)
SELECT Nombre, DiaEmite, DiaLimite, TasaInteres, ValorMAgua
FROM @TMunicipalidad M where M.sec = @low1
-----------------------------------------------------------------------


--Se itera en propiedades asociadas a la municipalidad
Set @low2 = 2
Select @high2 = max(P.sec) from @TPropiedades P

while @low2 <= @high2
BEGIN
Print 'inserta propiedad----------------------------------------------------------------------------'
--Inserta propiedad-----------------------------------------------------
INSERT Municipalidades.dbo.Propiedad (NumeroFinca, IdMunicipalidad, IdAbonado, Descripcion, Valor, CodigoPostal)
SELECT NumeroFinca, IdMunicipalidad, IdAbonado, Descripcion, Valor, CodigoPostal
FROM @TPropiedades P  where P.sec = @low2 and P.IdMunicipalidad = @low1
DECLARE @numero_finca int
SELECT NumeroFinca INTO @numero_finca FROM @TPropiedades P where P.sec = @low2 and P.IdMunicipalidad = @low1
-----------------------------------------------------------------------


--Se itera en servicios asociados a la propiedad
Set @low3 = 1
Select @high3 = max(T.sec) from @TServicioXPropiedad T

while @low3 <= @high3
BEGIN

Print 'inserta servicios por propiedad----------------------------------------------------------------------------'

INSERT Municipalidades.dbo.ServicioXPropiedad (NumeroFinca, IDServicio, FechaContratacion)
SELECT NumeroFinca, IDServicio, FechaContratacion
FROM @TServicioXPropiedad T where T.sec = @low3 and T.NumeroFinca = @numero_finca


Set @low3 = @low3 + 1
END

--Se itera en consumo de agua por propiedad
Set @low3 = 1
Select @high3 = max(T.sec) from @TConsumoAgua T

while @low3 <= @high3
BEGIN

Print 'inserta consumo de agua por propiedad----------------------------------------------------------------------------'

INSERT Municipalidades.dbo.ConsumoAgua (NumeroFinca, FechaLectura, QM3)
SELECT NumeroFinca, FechaLectura, QM3
FROM @TConsumoAgua T where T.sec = @low3 and T.NumeroFinca = @numero_finca


Set @low3 = @low3 + 1
END

--Se itera en recibos por propiedad
Set @low3 = 1
Select @high3 = max(T.sec) from @TRecibos T

while @low3 <= @high3
BEGIN

Print 'inserta recibo por propiedad----------------------------------------------------------------------------'

INSERT Municipalidades.dbo.Recibo (NumeroFinca, FechaEmision, FechaLimite, FechaPagado)
SELECT NumeroFinca, FechaEmision, FechaLimite, FechaPagado
FROM @TRecibos T where T.sec = @low3 and T.NumeroFinca = @numero_finca


Set @low3 = @low3 + 1
END

Set @low2 = @low2 + 1
END
-- se termina la iteracion por propiedades
Set @low1 = @low1 + 1

End
-- se termina la iteracion por municipalidades




--Se eliminan las tablas temporales
DROP TABLE @TMunicipalidad
DROP TABLE @TAbonado
DROP TABLE @TPropiedades
DROP TABLE @TServicioXPropiedad
DROP TABLE @TConsumoAgua
DROP TABLE @TRecibos
DROP TABLE @TTipoServicio

Comentarios

Entradas populares de este blog

XML y carga de datos (actualización)

Última reunión

actualización