Получение RSS в SQL запросе
Время чтения - 3 мин.Дата публикации 13.04.2021
На входе данные для RSS. На выходе - строка с XML.
ALTER PROCEDURE [dbo].[xml_getRSS]
@RSSItemData RSSItemType READONLY
,@titleChannel nvarchar(max) NULL
,@linkChannel nvarchar(1024) NULL
,@descriptionChannel nvarchar(max) NULL
,@languageChannel nvarchar(max) = 'en-us'
-- Проц. Генерирует данные для ленты новостей RSS.
-- Входные данные: переменная пользовательского тип данных (User-Defined Table Types) – структура RSS ленты. + параметры канала
-- вызов --
/* DECLARE @TestRSSItemTable RSSItemType
INSERT INTO @TestRSSItemTable ( titleArticle ,descriptionArticle ,authorArticle ,linkArticle,pubDateArticle )
SELECT 'RSS Tutorial', 'New RSS tutorial on w3ii', 'hege@refsnesdata.no', 'http://www.w3ii.com/xml/xml_rss.html', GETDATE()-10
UNION
SELECT 'XML Tutorial', 'New XML tutorial on w3ii', 'hege2@refsnesdata.no', 'http://www.w3ii.com/xml', GETDATE()-9
UNION
SELECT 'XML Tutorial test1', 'New XML tutorial on w3ii test1', 'hegetest1@refsnesdata.no', 'http://www.w3ii.com/xml', GETDATE()-8
EXEC [dbo].[as_getRssXML] @TestRSSItemTable ,'w3ii Home Page title' ,'http://www.w3ii.com' ,'Free web building tutorials' ,'en-us'
*/
AS
BEGIN
DECLARE @result nvarchar(max)
SET @result = N'' -- рез. процедуры
SET @result = @result + N'< xml version="1.0" encoding="UTF-8" >'+char(10)+'<rss version="2.0">'+char(10)+char(10)
-------------------------------------------------------------
DECLARE @cnt int = 0
SELECT @cnt = COUNT(*) FROM @RSSItemData
SELECT @cnt = ISNULL( @cnt, 0)
IF @cnt = 0
BEGIN
RAISERROR (N'Ошибка! Нет данных. Выполнение прервано.', 11,1)
RETURN
END
-------------------------------------------------------------
-- Канал
SET @result = @result + '<channel>'+char(10) -- откр.<channel>
SET @result = @result + '<title>' + ISNULL( @titleChannel, '') +'</title>'+char(10)
+ '<link>' + ISNULL( @linkChannel, '') +'</link>'+char(10)
+ '<description>'+ ISNULL( @descriptionChannel, '') +'</description>'+char(10)
+ '<language>' + ISNULL( @languageChannel, '') +'</language>'+char(10)
+char(10)
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- Статьи
DECLARE @tmp_titleArticle nvarchar(max), @tmp_descriptionArticle nvarchar(max), @tmp_authorArticle nvarchar(max), @tmp_linkArticle nvarchar(max), @tmp_pubDateArticle nvarchar(max)
DECLARE tmp_CursorArticles CURSOR --Объявляем курсор
FORWARD_ONLY
FOR
SELECT titleArticle ,descriptionArticle ,authorArticle ,linkArticle,pubDateArticle
FROM @RSSItemData Articles
ORDER BY titleArticle
OPEN tmp_CursorArticles;
FETCH NEXT FROM tmp_CursorArticles
INTO @tmp_titleArticle, @tmp_descriptionArticle, @tmp_authorArticle, @tmp_linkArticle, @tmp_pubDateArticle; -- Выбираем первую строку
WHILE @@FETCH_STATUS = 0 -- Выполняем в цикле перебор строк
BEGIN
SET @result = @result + '<item>'+char(10)
SET @result = @result + '<title>' + ISNULL( @tmp_titleArticle, '') +'</title>'+char(10)
+ '<description>'+ ISNULL( @tmp_descriptionArticle, '') +'</description>'+char(10)
+ '<author>' + ISNULL( @tmp_authorArticle, '') +'</author>'+char(10)
+ '<link>' + ISNULL( @tmp_linkArticle, '') +'</link>'+char(10)
+ '<pubDate>' + ISNULL( @tmp_pubDateArticle, '') +'</pubDate>'+char(10)
SET @result = @result + '</item>'+char(10)
+char(10)
FETCH NEXT FROM tmp_CursorArticles
INTO @tmp_titleArticle, @tmp_descriptionArticle, @tmp_authorArticle, @tmp_linkArticle, @tmp_pubDateArticle ; -- Выбираем следующую строку
END; -- tmp_CursorArticles;
CLOSE tmp_CursorArticles;
DEALLOCATE tmp_CursorArticles;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
SET @result = @result + '</channel>'+char(10) -- закрыть </channel>
-------------------------------------------------------------
--
SET @result = @result + N'</rss>'+char(10)
-- вывод результата
SELECT @result
END -- PROCEDURE
Тип данных для RSS:
CREATE TYPE [dbo].[RSSItemType] AS TABLE(
[titleArticle] [nvarchar](max) NULL,
[descriptionArticle] [nvarchar](max) NULL,
[authorArticle] [nvarchar](max) NULL,
[linkArticle] [nvarchar](1024) NULL,
[pubDateArticle] [datetime] NULL
)
GO
Что еще посмотреть по SQL Server
Как запустить SQL сценарий сразу на нескольких БД
Индексы SQL Server. Поиск дубликатов
Запрос для получения SQL всех индексов для таблиц базы данных SQL Server
Как перестроить все индексы на базе SQL Server
Как разрезать строку на части в SQL по некоторому символу
Конвертация из строки в таблицу в SQL Server
Выполнение прямого запроса к URL из SQL
SQL Server Как установить у таблицы описание (MS Description)
Как получить текущего юзера БД
Дополнительный заработок для разработчиков на T-SQL
Прямая работа с заказчиками как ИП или самозанятый. Нужно знать только SQL и HTML.
Falcon Space - платформа для создания сайтов с личными кабинетами
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Запрос расчета стоимости веб-проекта на базе Falcon Space
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта