Advertisement
Ruslan_Rayanov

xml_getRSS

Dec 25th, 2022
1,976
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.38 KB | None | 0 0
  1. CREATE OR ALTER PROCEDURE [dbo].[xml_getRSS]
  2.  @RSSItemData        RSSItemType READONLY
  3. ,@titleChannel       nvarchar(max)  NULL
  4. ,@linkChannel        nvarchar(1024) NULL  
  5. ,@descriptionChannel nvarchar(max)  NULL  
  6. ,@languageChannel    nvarchar(max)  = 'en-us'
  7.  
  8. -- Проц. Генерирует данные для ленты новостей RSS.
  9. -- Входные данные: переменная пользовательского тип данных (User-Defined Table Types)  – структура RSS ленты. + параметры канала
  10.  
  11. -- вызов --
  12. /* DECLARE @TestRSSItemTable RSSItemType
  13. INSERT INTO @TestRSSItemTable (  titleArticle ,descriptionArticle ,authorArticle ,linkArticle,pubDateArticle )
  14. SELECT  'RSS Tutorial', 'New RSS tutorial on w3ii', 'hege@refsnesdata.no', 'http://www.w3ii.com/xml/xml_rss.html', GETDATE()-10
  15. UNION
  16. SELECT  'XML Tutorial', 'New XML tutorial on w3ii', 'hege2@refsnesdata.no', 'http://www.w3ii.com/xml', GETDATE()-9
  17. UNION
  18. SELECT  'XML Tutorial test1', 'New XML tutorial on w3ii test1', 'hegetest1@refsnesdata.no', 'http://www.w3ii.com/xml', GETDATE()-8
  19.  
  20. EXEC [dbo].[as_getRssXML] @TestRSSItemTable ,'w3ii Home Page title' ,'http://www.w3ii.com' ,'Free web building tutorials' ,'en-us'
  21. */
  22. AS
  23. BEGIN
  24.  
  25.     DECLARE @result  nvarchar(max)
  26.     SET @result = N'' -- рез. процедуры
  27.     SET @result =  @result + N'<?xml version="1.0" encoding="UTF-8" ?>'+char(10)+'<rss version="2.0">'+char(10)+char(10)
  28. -------------------------------------------------------------  
  29.     DECLARE @cnt int = 0
  30.     SELECT  @cnt = COUNT(*) FROM @RSSItemData
  31.     SELECT  @cnt = ISNULL( @cnt, 0)
  32.  
  33.     IF @cnt = 0
  34.     BEGIN
  35.         RAISERROR (N'Ошибка! Нет данных. Выполнение прервано.', 11,1)
  36.         RETURN
  37.     END
  38. -------------------------------------------------------------
  39. -- Канал
  40.     SET @result =  @result + '<channel>'+char(10) -- откр.<channel>
  41.     SET @result =  @result + '<title>'      + ISNULL( @titleChannel, '')        +'</title>'+char(10)
  42.                            + '<link>'       + ISNULL( @linkChannel, '')         +'</link>'+char(10)
  43.                            + '<description>'+ ISNULL( @descriptionChannel, '')  +'</description>'+char(10)
  44.                            + '<language>'   + ISNULL( @languageChannel, '')     +'</language>'+char(10)
  45.                            +char(10)
  46. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  47. -- Статьи  
  48.     DECLARE @tmp_titleArticle nvarchar(max), @tmp_descriptionArticle nvarchar(max), @tmp_authorArticle nvarchar(max), @tmp_linkArticle nvarchar(max), @tmp_pubDateArticle nvarchar(max)
  49.     DECLARE tmp_CursorArticles CURSOR --Объявляем курсор
  50.     FORWARD_ONLY
  51.     FOR
  52.         SELECT titleArticle ,descriptionArticle ,authorArticle ,linkArticle,pubDateArticle
  53.         FROM  @RSSItemData Articles
  54.         ORDER BY titleArticle
  55.     OPEN tmp_CursorArticles;  
  56.  
  57.     FETCH NEXT FROM tmp_CursorArticles
  58.     INTO @tmp_titleArticle, @tmp_descriptionArticle, @tmp_authorArticle, @tmp_linkArticle, @tmp_pubDateArticle; -- Выбираем первую строку
  59.     WHILE @@FETCH_STATUS = 0  -- Выполняем в цикле перебор строк
  60.     BEGIN
  61.         SET @result =  @result + '<item>'+char(10)
  62.  
  63.         SET @result =  @result + '<title>'      + ISNULL( @tmp_titleArticle, '')        +'</title>'+char(10)
  64.                                + '<description>'+ ISNULL( @tmp_descriptionArticle, '')  +'</description>'+char(10)
  65.                                + '<author>'     + ISNULL( @tmp_authorArticle, '')       +'</author>'+char(10)
  66.                                + '<link>'       + ISNULL( @tmp_linkArticle, '')         +'</link>'+char(10)
  67.                                + '<pubDate>'    + ISNULL( @tmp_pubDateArticle, '')      +'</pubDate>'+char(10)
  68.  
  69.         SET @result =  @result + '</item>'+char(10)
  70.                                +char(10)
  71.  
  72.     FETCH NEXT FROM tmp_CursorArticles
  73.     INTO @tmp_titleArticle, @tmp_descriptionArticle, @tmp_authorArticle, @tmp_linkArticle, @tmp_pubDateArticle  ;  -- Выбираем следующую строку
  74.     END; --  tmp_CursorArticles;
  75.     CLOSE tmp_CursorArticles;  
  76.     DEALLOCATE tmp_CursorArticles;    
  77. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  78.         SET @result =  @result + '</channel>'+char(10) -- закрыть </channel>
  79. -------------------------------------------------------------
  80.     --
  81.     SET @result =  @result + N'</rss>'+char(10)
  82.     -- вывод результата
  83.     SELECT  @result
  84.  
  85. END -- PROCEDURE                  
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement