Генерация разметки HTML по шаблону с параметрами в JSON

Время чтения - 2 мин.Дата публикации 07.04.2026

Полностью собирать разметку HTML прямо в SQL процедуре - плохой вариант. 

Такую разметку гораздо сложнее поддерживать и редактировать.  Также подобную разметку можно генерировать и редактировать через AI. 

Можно использовать следующий шаблонизатор: 

declare @s nvarchar(max) = '{{name}} {{like}}'  -- берем разметку из HTML блока

-- параметры в формате JSON в формате '{"name": "xxx", "like": ""}'
declare @json nvarchar(max) = (select 'Компания "Металл"' name,  'good'  [like] 
                                                 FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)  --

-- получаем разметку с внедренными параметрами
select  [dbo].[as_renderHtmlTemplate] (@s ,@json)

Разметка может хранится в HTML блоке. 

Параметры извлекаются через SQL запрос с множеством подзапросов. 

Примечание:

  1. Если значение будет NULL, то это не сломает разметку.  
  2. Если параметра нет среди JSON, то он заменится на пустую строку. 
CREATE FUNCTION [dbo].[as_renderHtmlTemplate]
(
    @HtmlTemplate NVARCHAR(MAX),
    @JsonParams NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    -- Переменные для цикла
    DECLARE @StartPos INT, @EndPos INT;
    DECLARE @Key NVARCHAR(100);
    DECLARE @Value NVARCHAR(MAX);
    
    DECLARE @MarkerStart NVARCHAR(2) = '{{';
    DECLARE @MarkerEnd NVARCHAR(2) = '}}';
    DECLARE @MarkerLen INT = LEN(@MarkerStart);
    
    -- Защита от бесконечного цикла (на случай битого шаблона)
    DECLARE @SafetyCounter INT = 0;

    -- Начинаем поиск
    SET @StartPos = CHARINDEX(@MarkerStart, @HtmlTemplate);
    
    WHILE @StartPos > 0 AND @SafetyCounter < 1000
    BEGIN
        SET @EndPos = CHARINDEX(@MarkerEnd, @HtmlTemplate, @StartPos + @MarkerLen);

        -- Если найдена полная пара {{...}}
        IF @EndPos > 0
        BEGIN
            -- 1. Извлекаем имя ключа
            SET @Key = SUBSTRING(@HtmlTemplate, @StartPos + @MarkerLen, @EndPos - @StartPos - @MarkerLen);
            
            -- 2. Ищем значение в JSON
            SET @Value = JSON_VALUE(@JsonParams, '$.' + @Key);

            -- 3. Замена
            IF @Value IS NOT NULL
            BEGIN
                -- Подставляем значение
                SET @HtmlTemplate = STUFF(@HtmlTemplate, @StartPos, (@EndPos - @StartPos + 2), @Value);
                -- Сдвигаем поиск вперед на длину вставленного значения
                SET @StartPos = CHARINDEX(@MarkerStart, @HtmlTemplate, @StartPos + LEN(@Value));
            END
            ELSE
            BEGIN
                -- Значение не найдено -> УДАЛЯЕМ маркеры и ключ (заменяем на пустоту)
                SET @HtmlTemplate = STUFF(@HtmlTemplate, @StartPos, (@EndPos - @StartPos + 2), '');
                -- Сдвигаем поиск на 1 символ вперед (так как мы удалили фрагмент)
                SET @StartPos = CHARINDEX(@MarkerStart, @HtmlTemplate, @StartPos + 1);
            END
        END
        ELSE
        BEGIN
            -- Закрывающий маркер не найден, прерываем
            BREAK;
        END
        
        SET @SafetyCounter = @SafetyCounter + 1;
    END

    RETURN @HtmlTemplate;
END

 

 

 

 

Насколько полезной была статья?

Что еще посмотреть по SQL Server

Как сгенерировать различные ФИО в SQL Server

Как сделать поиск по всем таблицам базы данных SQL Server

Поиск строки во всех хранимых процедурах SQL Server

Скрипт бекапа базы и восстановления из бекапа

SQL запрос для получения всех текущих выполняющихся запросов на базе

Запрос для поиска проблемных SQL по процессору

Как писать запросы с колонкой по временным интервалам (неделя, месяц, квартал, год)

Получить части пути к файлу (расширение, путь, название файла)

SQL Проверка валидности email

Из строки в Base64 и обратно в SQL Server (с учетом кирилицы)

Дополнительный заработок для разработчиков на T-SQL

Прямая работа с заказчиками как ИП или самозанятый. Нужно знать только SQL и HTML.
Falcon Space - платформа для создания сайтов с личными кабинетами
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Запрос расчета стоимости веб-проекта на базе Falcon Space
Если видео Youtube плохо грузится, то попробуйте найти видео в ВК видео на канале Falcon Space
Сайт использует Cookie, Яндекс Метрику. Используя сайт, вы соглашаетесь с правилами сайта. См. Правила конфиденциальности и Правила использования сайта OK