Разбор строки на части и занесение в табличную переменную
Как я разбираю строку параметров в таблицу 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
Что здесь происходит, шаг за шагом
- Разбиваем строку на строки. Символ перевода строки — это
char(10). Функцияdbo.splitпревращает нашу длинную строку в набор отдельных строчек. - Каждую строчку — на две части. Тут в дело вступает
dbo.str_splitPart. Она режет строку по знаку «=». Первая часть — имя параметра, вторая — его значение. - Фильтруем пустые строки. Условие
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
Чем отличается For JSON Auto от For JSON Path
Дополнительный заработок для разработчиков на T-SQL
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта