SQL Server - параметр с неизвестным числом нескольких значений - PullRequest
0 голосов
/ 30 сентября 2019

Я создаю сетку с двумя столбцами: Name и HotelId. Проблема в том, что данные для этой сетки должны отправляться с одним параметром VARCHAR type и должны выглядеть следующим образом:

@Parameter = 'Name1:5;Name2:10;Name3:6'

Как видите, параметр содержит имя и число, представляющее значение идентификатора. и у вас может быть несколько таких записей, разделенных символом "; ".

Моя первая идея состояла в том, чтобы написать запрос, который создаст temp table, который будет иметь два столбца, и заполнить егоданные из параметра.

Как мне этого добиться? Кажется, мне нужно разделить параметр два раза: по символу "; " для каждой строки, а затем по символу ": " для каждого столбца. Как мне подходить к этому?

Кроме того, если есть какое-либо другое более подходящее решение, я открыт для предложений.

1 Ответ

2 голосов
/ 30 сентября 2019

Сначала удалите таблицу #temp, если существует ...

IF OBJECT_ID('tempdb..#temp', 'U') IS NOT NULL
/*Then it exists*/
DROP TABLE #temp

Затем создайте #temp table

CREATE TABLE #temp (v1 VARCHAR(100))

Объявите все @Paramter....

DECLARE @Parameter VARCHAR(50)
SET @Parameter= 'Name1:5;Name2:10;Name3:6'
DECLARE @delimiter nvarchar(1) 
SET @delimiter= N';';

Здесь вставка всех значений @parameter в таблицу #temp с использованием разделенных '; ' ..

INSERT INTO #temp(v1)
SELECT * FROM(

SELECT v1 = LTRIM(RTRIM(vals.node.value('(./text())[1]', 'nvarchar(4000)')))
FROM (
    SELECT x = CAST('<root><data>' + REPLACE(@Parameter, @delimiter, '</data><data>') + '</data></root>' AS XML).query('.')
) v
CROSS APPLY x.nodes('/root/data') vals(node)
)abc

После вставки значения в #tempТаблица..Выберите все значения в ': ' разделенных ...

select  Left(v1, CHARINDEX(':', v1)-1) as Name , STUFF(v1, 1, CHARINDEX(':', v1), '') as HotelId FROM #temp

Тогда вы получите этот тип Вывод

enter image description here

...