Lectura de XML para Operaciones
Natalia Vargas Reyes (de 10 am a 12:00 pm) 2:00 horas
Problemas con FK's que creimos haber solucionado pero en realidad estaban al reves, como que llegada tuviese el id del movimiento pero el movimiento en realidad debía tener el Id de la llegada.
Lo mismo pasó con Sanción y movimiento de tiempo, pues las FK's estaban al revés.
También sucedió que habían problemas al insertar en las tablas por los siguientes problemas:
Eso se solucionó ya que como se usaba la tabla de Corredor en equipo en Instancia de giro, al mapearse se necesitaba el Id de la carrera y no de esta instancia de la tabla.
EL SP ccmpleto quedó así.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SPCargarOperacionesCiclistas]
AS
BEGIN
SET NOCOUNT ON
--BEGIN TRY
DECLARE @DocumentoXML XML,
@LenNodos INT, --cantidad de nodos año
@LenInstancias INT,
@Iterador INT, --iterador de años
@AnnioOperacion INT,
@IteradorInstancias INT
SET @DocumentoXML = (SELECT [XML]
FROM DatosXml
WHERE Nombre= 'Operaciones')
--Contar los nodos de años
SELECT @LenNodos = COUNT(O.f.value('@Id','INT'))
FROM @DocumentoXML.nodes('Root/Year') AS O(f)
SET @Iterador = 1
WHILE @Iterador<=@LenNodos--recorre todos los años
BEGIN
SELECT @AnnioOperacion = O.f.value('@Id','INT')
FROM @DocumentoXML.nodes('Root/Year[sql:variable("@Iterador")]') AS O(f)
PRINT @AnnioOperacion
--Cantidad de instancias para un año
SELECT @LenInstancias = COUNT(O.f.value('@IdGiro','INT'))
FROM @DocumentoXML.nodes('Root/Year[sql:variable("@Iterador")]/InstanciaGiro') AS O(f)
PRINT @LenInstancias
PRINT 'INSTANCIAS EN ANNIO'
SET @IteradorInstancias = 1
WHILE @IteradorInstancias<=@LenInstancias --recorre todas instancias de giro por año
BEGIN
PRINT 'Iterador instancia por annio'
PRINT @IteradorInstancias
----------------------------------Instancia de giro-----------------------------------------
PRINT 'InstanciaGiro'
INSERT INTO [dbo].[InstanciaGiro]
(
[Codigo]
,[FechaInicio]
,[FechaFin]
,[GiroId]
,[Anno]
)
SELECT
d.value('@CodigoInstancia', 'VARCHAR(128)')
, d.value('@FechaInicio', 'DATETIME')
, d.value('@FechaFin', 'DATETIME')
, d.value('@IdGiro', 'INT')
, @AnnioOperacion
FROM
@DocumentoXML.nodes('Root/Year[sql:variable("@Iterador")]/InstanciaGiro[sql:variable("@IteradorInstancias")]') AS t(d);
----------------------------------Equipo en Instancia de giro-----------------------------------------
PRINT 'InstanciaGiro_Equipo'
INSERT INTO [dbo].[InstanciaGiro_Equipo]
(
[InstanciaGiroId]
,[EquipoId]
,[TotalTiempo]
,[TotalPuntos]
)
SELECT
IG.Id
, E.value('@Equipo', 'INT')
, 0
, 0
FROM
@DocumentoXML.nodes('Root/Year[sql:variable("@Iterador")]/InstanciaGiro[sql:variable("@IteradorInstancias")]/GiroXEquipo') AS G(E)
INNER JOIN
[dbo].[InstanciaGiro] AS IG
ON
E.value('@CodigoInstanciaGiro', 'VARCHAR(128)') = IG.Codigo;
----------------------------------Corredor en Equipo en Instancia de giro-----------------------------------------
PRINT 'InstanciaGiro_Equipo_Corredor'
INSERT INTO [dbo].[InstanciaGiro_Equipo_Corredor]
(
[InstanciaGiro_EquipoId]
,[CorredorId]
,[NumeroCamisa]
,[SumaTiempos]
,[SumaPuntosRegularidad]
,[SumaPuntosMontanna]
)
SELECT
IE.Id
, E.value('@Corredor', 'INT')
, E.value('@NumeroCamisa', 'INT')
, 0
, 0
, 0
FROM
@DocumentoXML.nodes('Root/Year[sql:variable("@Iterador")]/InstanciaGiro[sql:variable("@IteradorInstancias")]/CorredoresEnEquipoEnGiro') AS G(E)
INNER JOIN [dbo].[InstanciaGiro] AS IG ON E.value('@CodigoInstanciaGiro', 'VARCHAR(128)') = IG.Codigo
INNER JOIN [dbo].[InstanciaGiro_Equipo] AS IE ON IG.Id=IE.InstanciaGiroId;
--------------------------------Carreras-----------------------------------------
PRINT 'Carrera'
INSERT INTO [dbo].[Carrera]
(
[CodigoCarrera]
,[Fecha]
,[HoraInicio]
,[EtapaId]
,[InstanciaGiroId]
)
SELECT
E.value('@CodigoCarrera', 'VARCHAR(128)')
, E.value('@FechaCarrera', 'DATETIME')
, E.value('@HoraInicio', 'TIME(7)')
, E.value('@IdEtapa', 'INT')
, IG.Id
FROM
@DocumentoXML.nodes('Root/Year[sql:variable("@Iterador")]/InstanciaGiro[sql:variable("@IteradorInstancias")]/Carrera') AS G(E)
INNER JOIN [dbo].[InstanciaGiro] AS IG ON E.value('@CodigoInstanciaGiro', 'VARCHAR(128)') = IG.Codigo;
--------------------------------Final corredores en Carreras-----------------------------------------
PRINT 'Llegada'
INSERT INTO [dbo].[Llegada]
(
[HoraFin]
,[CarreraId]
,[CorredorId]
)
SELECT
E.value('@HoraLlegada', 'TIME(7)')
, CA.Id
, CO.CorredorId -- el id del corredor en en el equipo en la instancia de giro
--, CA.CodigoCarrera
FROM
@DocumentoXML.nodes('Root/Year[sql:variable("@Iterador")]/InstanciaGiro[sql:variable("@IteradorInstancias")]/FinalCorredoresEnCarrera') AS G(E)
INNER JOIN
[dbo].[Carrera] AS CA
ON
E.value('@CodigoCarrera', 'VARCHAR(128)') = CA.CodigoCarrera
INNER JOIN
[dbo].[InstanciaGiro_Equipo_Corredor] AS CO
ON
E.value('@NumeroCamisa', 'INT') = CO.NumeroCamisa;
--------------------------------Ganador de premio de montaña en Carreras-----------------------------------------
PRINT 'Ganadores_PremioMontanna'
INSERT INTO [dbo].[Ganadores_PremioMontanna]
(
[CarreraId]
,[CorredorId]
,[PremioMontannaId]
)
SELECT
CA.Id
, CO.CorredorId -- Id del corredor en en el equipo en la instancia de giro
, PM.Id -- Id del premio de montaña
FROM
@DocumentoXML.nodes('Root/Year[sql:variable("@Iterador")]/InstanciaGiro[sql:variable("@IteradorInstancias")]/GanadorPremioMontanaEnCarrera') AS G(E)
INNER JOIN [dbo].[Carrera] AS CA ON E.value('@CodigoCarrera', 'VARCHAR(128)') = CA.CodigoCarrera
INNER JOIN [dbo].[InstanciaGiro_Equipo_Corredor] AS CO ON E.value('@NumeroCamisa', 'INT') = CO.NumeroCamisa
INNER JOIN [dbo].[PremioMontanna] AS PM ON E.value('@NombrePremio', 'VARCHAR(128)') = PM.Nombre;
------------------------------Sanciones-----------------------------------------
PRINT 'Sanciones_Carrera'
INSERT INTO [dbo].[Sanciones_Carrera]
(
[JuezId]
,[CorredorId]
,[CarreraId]
,[MinutosCastigo]
,[Descripcion]
)
SELECT
C.value('@IdJuez', 'INT')
, CO.CorredorId -- el id del corredor en en el equipo en la instancia de giro
, CA.Id
, C.value('@MinutosCastigo', 'INT')
, C.value('@Descripcion', 'VARCHAR(128)')
FROM
@DocumentoXML.nodes('Root/Year[sql:variable("@Iterador")]/InstanciaGiro[sql:variable("@IteradorInstancias")]/SancionCarrera ') AS S(C)
INNER JOIN [dbo].[Carrera] AS CA ON C.value('@CodigoCarrera', 'VARCHAR(128)') = CA.CodigoCarrera
INNER JOIN [dbo].[InstanciaGiro_Equipo_Corredor] AS CO ON C.value('@NumeroCamisa', 'INT') = CO.NumeroCamisa;
SET @IteradorInstancias = @IteradorInstancias + 1 --Incrementa instancias en un año
END --WHILE 2
SET @Iterador = @Iterador+1--incrementa los días
END --END DEL BEGIN DEL WHILE 1
--END TRY
--BEGIN CATCH
-- PRINT 'Error al cargar datos';
-- INSERT INTO dbo.BE_DBErrors VALUES (
-- SUSER_SNAME(),
-- ERROR_NUMBER(),
-- ERROR_STATE(),
-- ERROR_LINE(),
-- ERROR_PROCEDURE(),
-- ERROR_MESSAGE(),
-- GETDATE()
-- );
--END CATCH
END
--EXEC SPCargarOperacionesCiclistas

Comentarios
Publicar un comentario