Это выполнимо, но Цепеш правильный, вы можете быстро перерасти эту технику.
В таблице карты может быть столько элементов, сколько необходимо. Даже ненужные элементы будут проигнорированы.
Вот упрощенный пример.
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>