使用 SQL 创建 html 内容
Creating html content with SQL
我使用的是Microsoft SQL Server 2016。我可以在其他版本中使用它。
我的表中有 html 页面内容的变量。
SQL 服务器表:
PageVariables
Menus
Slides etc.
我可以在 SQL 服务器中生成页面 html 而无需编程吗?
我试着用部分替换来完成。但它不适用于多行表。我也不认为这是正确的方法。
在 javascript 中是否有类似 SQL 服务器的东西,例如 mustache、vue、javascript 文字?
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')
当您有多个行需要合并为一个条目时,您想要做的是这些 string concatenation operations 之一:
- 使用 FOR XML PATH
连接多行
- 使用 COALESCE 连接行
- 使用STRING_AGG
它是可行的,但穿刺器是正确的,你可能很快就会放弃这种技术。
地图 table 可以根据需要包含任意数量的项目。即使不需要的物品也会被忽略。
这是一个简化的例子。
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
Returns
<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>
我使用的是Microsoft SQL Server 2016。我可以在其他版本中使用它。
我的表中有 html 页面内容的变量。
SQL 服务器表:
PageVariables
Menus
Slides etc.
我可以在 SQL 服务器中生成页面 html 而无需编程吗?
我试着用部分替换来完成。但它不适用于多行表。我也不认为这是正确的方法。
在 javascript 中是否有类似 SQL 服务器的东西,例如 mustache、vue、javascript 文字?
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')
当您有多个行需要合并为一个条目时,您想要做的是这些 string concatenation operations 之一:
- 使用 FOR XML PATH 连接多行
- 使用 COALESCE 连接行
- 使用STRING_AGG
它是可行的,但穿刺器是正确的,你可能很快就会放弃这种技术。
地图 table 可以根据需要包含任意数量的项目。即使不需要的物品也会被忽略。
这是一个简化的例子。
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
Returns
<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>