(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