Разбор строки на части и занесение в табличную переменную

Время чтения - 1 мин.Дата публикации 28.03.2025 (обновлено 21.05.2026)

Как я разбираю строку параметров в таблицу SQL Server

Представьте ситуацию: на входе есть строка с параметрами. Выглядит она так:

p1=1111
p2=2222
p3=3333
p4=4444
p5=5555
p6=6666
p7=7777
p8=8888
p9=9999
p10=0000

Это классический формат — каждая пара «ключ=значение» на отдельной строке. Нам нужно превратить это в таблицу. Зачем? Например, чтобы динамически подставлять параметры в отчёт или передавать их в хранимую процедуру.

Я часто использую вот такой скрипт:

declare @ps table(name nvarchar(max), value nvarchar(max))

insert into @ps(name, value)
select dbo.str_splitPart(value, '=', 1),  dbo.str_splitPart(value, '=', 2) 
from dbo.split(@params, char(10))
where len(value) > 0

Что здесь происходит, шаг за шагом

  1. Разбиваем строку на строки. Символ перевода строки — это char(10). Функция dbo.split превращает нашу длинную строку в набор отдельных строчек.
  2. Каждую строчку — на две части. Тут в дело вступает dbo.str_splitPart. Она режет строку по знаку «=». Первая часть — имя параметра, вторая — его значение.
  3. Фильтруем пустые строки. Условие where len(value) > 0 отсекает мусор. Если вдруг в конце строки затесался лишний перенос — он не попадёт в результат.

В итоге получаем аккуратную таблицу @ps с колонками name и value. Можно сразу делать SELECT, JOIN или передавать дальше.

Ещё пара примеров из практики

Пример 1. Допустим, строка приходит из внешнего API в таком виде:

user_id=42
role=admin
lang=ru

Тот же скрипт спокойно разберёт её на три записи. Потом можно вставить их во временную таблицу и использовать в запросе.

Пример 2. Бывает, что в значениях встречаются пробелы или даже знаки «=». Например:

filter=price=100
sort=asc

Тут важно помнить: функция str_splitPart делит только по первому вхождению разделителя. Так что «price=100» останется целым значением. Это удобно, если вы контролируете формат на входе.

Такой подход я применяю постоянно — он простой, надёжный и не требует танцев с бубном.

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

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

Как кешировать в SQL результаты сложных операций

Как искать зависимости объектов в SQL Server

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

Формирование сложного JSON объекта через SELECT в SQL Server

Как вставить данные в таблицу БД из таблицы на другом сервере

Использование CPU в SQL Server Express Edition

Как форматировать код sql в sql server management studio

Работа с XML в SQL Server

Антипаттерны SQL Server

Чем отличается For JSON Auto от For JSON Path

Альтернатива множественному Replace

Из строки в таблицу. Функция split

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

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