domingo, 20 de mayo de 2018

Fecha Inicial : 20/05/2018
Fecha Final :  20/05/2018
Hora Inicio: 9:10 AM
Hora Final: 11:30AM
Horas invertidas(Minutos):  140
Colaboradores: Wilson Lopez, Oscar Cortés.

Actividad
-Separar los xml en archivos individuales para un mejor manejo de posibles errores en los datos , asi como una lectura mas eficiente ya que para llenar una  n tabla no es necesario abrir todos los datos si no solo el archivo de dicho xml .



-Hacer leves modificaciones al código de creación de la base de datos para que este se adapte de manera correcta a los datos que tienen los xmls

-Creación de los stores procedures de llenado de datos a partir de los xml generados por los compañeros.

Código:


--|||StoreProcedures|||--

--Eliminar los datos de las tablas
CREATE PROCEDURE [dbo].[VaciarTablas]
AS
BEGIN
    EXEC sp_MSForEachTable 'DISABLE TRIGGER ALL ON ?';
    EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL';
    EXEC sp_MSForEachTable 'DELETE FROM ?';
    EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL';
    EXEC sp_MSForEachTable 'ENABLE TRIGGER ALL ON ?';
    EXEC sp_MSforeachtable @command1 = 'DBCC CHECKIDENT(''?'', RESEED, 0)'
END
GO
--Leer Abonados del XML
CREATE PROCEDURE [dbo].[readXML_Abonados]
AS
BEGIN
    DECLARE @xml xml
    DECLARE @hdoc int
    BEGIN TRY
        SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data-P2\Abonados.xml', SINGLE_BLOB) as Abonados(roow)
        if (@xml IS NOT NULL)
        begin
            begin tran
                EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

                SELECT * INTO #tmp_Abonados FROM OPENXML(@hDoc, 'XML/Abonado/dbo.Abonado')
                WITH(
                    Nombre [nvarchar](50)
                    
                )
                begin
                    INSERT INTO Abonado(Nombre) SELECT Nombre FROM #tmp_Abonados            
                end
                DROP TABLE #tmp_Abonados
        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            return 0 --failed
    END CATCH
END
GO
--Leer Tipos de servicio del XML
CREATE PROCEDURE [dbo].[readXML_TipoServicio]
AS
BEGIN
    DECLARE @xml xml
    DECLARE @hdoc int
    BEGIN TRY
        SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data-P2\Tiposervicio.xml', SINGLE_BLOB) as TipoServicio(roow)
        if (@xml IS NOT NULL)
        begin
            begin tran
                EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

                SELECT * INTO #tmp_TipoServicio FROM OPENXML(@hDoc,'XML/TipoServicio/dbo.TipoServicio')
                WITH(
                    Nombre [nvarchar](50),
Valor float,
Variable int
                    
                )
                begin
                    INSERT INTO TipoServicio(Nombre,Valor,Variante) SELECT Nombre,Valor,Variable FROM #tmp_TipoServicio         
                end
                DROP TABLE #tmp_TipoServicio
        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            SELECT ERROR_MESSAGE() --MOSTRAR EL ERROR
            return 0 --failed
    END CATCH
END
GO
--Leer Municipalidades del XML
CREATE PROCEDURE [dbo].[readXML_Municipalidades]
AS
BEGIN
    DECLARE @xml xml
    DECLARE @hdoc int
    BEGIN TRY
        SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data-P2\Municipalidades.xml', SINGLE_BLOB) as Municipalidades(roow)
        if (@xml IS NOT NULL)
        begin
            begin tran
                EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

                SELECT * INTO #tmp_Municipalidades FROM OPENXML(@hDoc,'XML/Municipalidades/dbo.Municipalidades')
                WITH(
                    Nombre [nvarchar](50),
DiaEmite int,
DiaLimite int,
TasaInteres float,
ValorMAgua float
                )
                begin
                    INSERT INTO Municipalidad(Nombre,DiaEmite,DiaLimite,TasaInteresMorosidad,ValorMCubicoAgua)
                    SELECT Nombre,DiaEmite,DiaLimite,TasaInteres,ValorMAgua FROM #tmp_Municipalidades
                end
                DROP TABLE #tmp_Municipalidades
        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            SELECT ERROR_MESSAGE() --MOSTRAR EL ERROR
            return 0 --failed
    END CATCH
END
GO
--Leer Propiedades del XML
CREATE PROCEDURE [dbo].[readXML_Propiedades]
AS
BEGIN
    DECLARE @xml xml
    DECLARE @hdoc int
    BEGIN TRY
        SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data-P2\Propiedades.xml', SINGLE_BLOB) as Propiedades(roow)
        if (@xml IS NOT NULL)
        begin
            begin tran
                EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

                SELECT * INTO #tmp_Propiedades FROM OPENXML(@hDoc,'XML/Propiedades/dbo.Propiedades')
                WITH(
                    NumeroFinca int,
IdMunicipalidad int,
IdAbonado int,
Descripcion nvarchar(100),
Valor money,
CodigoPostal int
                )
                begin
                    INSERT INTO Propiedad(NumeroFinca,FK_Municipalidad,FK_Abonado,Descripcion,Valor,CodPostal)
                    SELECT NumeroFinca,IdMunicipalidad,IdAbonado,Descripcion,Valor,CodigoPostal FROM #tmp_Propiedades
                end
                DROP TABLE #tmp_Propiedades
        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            SELECT ERROR_MESSAGE() --MOSTRAR EL ERROR
            return 0 --failed
    END CATCH
END
GO

Errores: 
En el xml de propiedades la propiedad numero 48370 no tiene un abonado, se soluciona agregando un nuevo propietario a dicha propiedad

No hay comentarios.:

Publicar un comentario