sábado, 19 de noviembre de 2016

Se trabaja en la generación de algunos datos de prueba

(5 horas)

Para el día de hoy ya tenemos nuestro diagrama de base de datos final. Lo mostraremos a continuación:


Usamos las habilidades de Python para generar unos datos de prueba muy sencillos y usamos los SPs ya programados para insertarlos. De esta manera, hizimos una pequeña simulación como que presentamos a continuación:

USE [III Proyecto - WebNews]
GO

SET LANGUAGE Spanish

DECLARE @XMLwithOpenXML TABLE
(
ID INT IDENTITY PRIMARY KEY,
XMLData XML,
LoadedDateTime DATETIME
)

INSERT INTO @XMLwithOpenXML(XMLData, LoadedDateTime)
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE()
FROM OPENROWSET(BULK 'C:\Users\Administrator\Desktop\Datos de Prueba - Proyecto III.xml', SINGLE_BLOB) AS x;

DECLARE @XML AS XML, @hDoc AS INT
SELECT @XML = XMLData FROM @XMLwithOpenXML

EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

DECLARE @Noticias table
(
ID int IDENTITY PRIMARY KEY,
Titulo varchar(200),
Texto varchar(MAX),
Fecha date,
Autor varchar(50),
Subtema varchar(3)
)

DECLARE @Calificaciones table
(
ID int IDENTITY PRIMARY KEY,
Calificacion int,
Fecha date,
Email varchar(50),
Fk_Noticia int
)

DECLARE @Comentarios table
(
ID int IDENTITY PRIMARY KEY,
Comentario varchar(500),
Fecha date,
Email varchar(50),
Fk_Noticia int
)

INSERT INTO @Noticias(Titulo, Texto, Fecha, Autor, Subtema)
SELECT Titulo, Texto, Fecha, Autor, Subtema
FROM OPENXML(@hDoc, 'ProyectoIII/Noticias')
WITH
(
Titulo varchar(200) 'Titulo',
Texto varchar(MAX) 'Texto',
Fecha date 'Fecha',
Autor varchar(50) 'EmailAutor',
Subtema varchar(3) 'CodigoSubtema'
)

INSERT INTO @Calificaciones(Calificacion, Fecha, Email, Fk_Noticia)
SELECT Calificacion, Fecha, Email, Fk_Noticia
FROM OPENXML(@hDoc, 'ProyectoIII/Calificaciones')
WITH
(
Calificacion int 'Calificacion',
Fecha date 'Fecha',
Email varchar(50) 'EmailUsuario',
Fk_Noticia int 'Fk_Noticia'
)

INSERT INTO @Comentarios(Comentario, Fecha, Email, Fk_Noticia)
SELECT Comentario, Fecha, Email, Fk_Noticia
FROM OPENXML(@hDoc, 'ProyectoIII/Comentarios')
WITH
(
Comentario varchar(500) 'Comentario',
Fecha date 'Fecha',
Email varchar(50) 'EmailUsuario',
Fk_Noticia int 'Fk_Noticia'
)

DECLARE @Fecha date = '2016-11-01'

DECLARE @Titulo varchar(200)
DECLARE @Texto varchar(MAX)
DECLARE @EmailAutor varchar(50)
DECLARE @Subtema varchar(3)

DECLARE @Calificacion int
DECLARE @Comentario varchar(500)
DECLARE @EmailUsuario varchar(50)

DECLARE @ID_Noticia int
DECLARE @ID_Calificacion int
DECLARE @ID_Comentario int

WHILE @Fecha != '2016-11-22'
BEGIN
  
    SELECT @ID_Noticia = MIN(ID) FROM @Noticias WHERE Fecha = @Fecha
    WHILE @ID_Noticia IS NOT NULL
    BEGIN
      
        SELECT @Titulo = Titulo, @Texto = Texto, @EmailAutor = Autor, @Subtema = Subtema FROM @Noticias WHERE ID = @ID_Noticia
        EXEC dbo.WNSP_AgregarNoticia @Titulo, @Texto, @Fecha, @EmailAutor, @Subtema

        SELECT @ID_Noticia = MIN(ID) FROM @Noticias WHERE Fecha = @Fecha AND ID > @ID_Noticia

    END

    EXEC dbo.WNSP_GenerarPortada @Fecha

    SELECT @ID_Calificacion = MIN(ID) FROM @Calificaciones WHERE Fecha = @Fecha
    WHILE @ID_Calificacion IS NOT NULL
    BEGIN
      
        SELECT @Calificacion = Calificacion, @EmailUsuario = Email, @ID_Noticia = Fk_Noticia FROM @Calificaciones WHERE ID = @ID_Calificacion
        EXEC dbo.WNSP_CalificarNoticia @Calificacion, @Fecha, @EmailUsuario, @ID_Noticia

        EXEC dbo.WNSP_VisitarNoticia @ID_Noticia

        SELECT @ID_Calificacion = MIN(ID) FROM @Noticias WHERE Fecha = @Fecha AND ID > @ID_Calificacion

    END

    SELECT @ID_Comentario = MIN(ID) FROM @Comentarios WHERE Fecha = @Fecha
    WHILE @ID_Comentario IS NOT NULL
    BEGIN
      
        SELECT @Comentario = Comentario, @EmailUsuario = Email, @ID_Noticia = Fk_Noticia FROM @Comentarios WHERE ID = @ID_Comentario
        EXEC dbo.WNSP_ComentarNoticia @Comentario, @Fecha, @EmailUsuario, @ID_Noticia

        EXEC dbo.WNSP_VisitarNoticia @ID_Noticia

        SELECT @ID_Comentario = MIN(ID) FROM @Comentarios WHERE Fecha = @Fecha AND ID > @ID_Comentario

    END

    SET @Fecha = DATEADD(DAY, 1, @Fecha)
END

EXEC sp_xml_removedocument @hDoc

No hay comentarios:

Publicar un comentario