Создание содержимого html с помощью SQL - PullRequest
0 голосов
/ 10 июля 2020

Я использую Microsoft SQL Server 2016. Я могу использовать его в другой версии.

У меня есть переменные содержимого страницы html в моих таблицах.

SQL Таблицы сервера:

PageVariables
Menus
Slides etc.

Могу ли я сгенерировать страницу html на SQL сервере без программирования?

Я пытался сделать это с помощью Replace частично. Но это не работает с многострочными таблицами. Я тоже не думаю, что это правильный путь.

Есть ли что-то вроде SQL Server в javascript, например, усы, vue, javascript literal?

declare @template nvarchar(max)='<html><head>{title}</title></head><body><div class="menu">{menu}</div></body></html>'

declare @title  nvarchar(max)='My Page'
declare @menu  nvarchar(max)=''

SELECT 'My Menu-1' AS 'MenuName',
       '?link=1' AS 'MenuLink'
UNION ALL
SELECT 'My Menu-2' AS 'MenuName',
       '?link=2' AS 'MenuLink'

/*
for @menu
    set @menu='<a href="@MenuLink">@MenuName</a>'
next
*/
SET @template = REPLACE(@template, '{title}', @title)
SET @template = REPLACE(@template, '{menu}', @menu)

SELECT @template

это тоже сложно.

        SELECT '?link=1' AS '@href',
               'My Menu-1' AS 'span'

        UNION ALL
        SELECT '?link=2' AS '@href',
               'My Menu-2' AS 'span'

        FOR XML PATH ('a'), ROOT ('div')

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Это выполнимо, но Цепеш правильный, вы можете быстро перерасти эту технику.

В таблице карты может быть столько элементов, сколько необходимо. Даже ненужные элементы будут проигнорированы.

Вот упрощенный пример.

declare @template nvarchar(max)='
<html>
    <head>
        <title>{title}</title>
    </head>
    <body>
        <div class="welcome">{username}</div>
        <div class="menu">
            {menu}
        </div>
    </body>
</html>
'

Declare @map table (Seq int,Item varchar(100),Value varchar(max))
Insert Into @map values
 (1   ,'{title}','My Page')
,(2   ,'{username}','Mary-Jane')
,(9999,'{title}','')             -- clean-up
,(9999,'{username}','')          -- clean-up
,(9999,'{menu}','')              -- clean-up


-- Generate from select ... note the trailing {menu}
Insert Into @map values  
 (1  ,'{menu}','<a href="My Menu-1">?link=1</a>{menu}')
,(2  ,'{menu}','<a href="My Menu-2">?link=2</a>{menu}')



Select @template=replace(@template,Item,Value)
 From  @map
 Order By Seq

Print @template

Возвращает

<html>
    <head>
        <title>My Page</title>
    </head>
    <body>
        <div class="welcome">Mary-Jane</div>
        <div class="menu">
            <a href="My Menu-1">?link=1</a><a href="My Menu-2">?link=2</a>
        </div>
    </body>
</html>
0 голосов
/ 10 июля 2020

То, что вы хотите сделать, - это одна из этих операций конкатенации строк , когда у вас есть несколько строк, которые вам нужно объединить в одну запись:

  1. Объединить несколько строк с помощью FOR XML ПУТЬ
  2. Конкатенация строк с использованием COALESCE
  3. Использование STRING_AGG
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...