Это чистый подход XQuery
DECLARE @x XML =
N'<Fields>
<Field>
<Name>First</Name>
<Value>1</Value>
</Field>
<Field>
<Name>Second</Name>
<Value>2</Value>
</Field>
<Field>
<Name>Third</Name>
<Value>3</Value>
</Field>
</Fields>';
- запрос
SELECT STUFF(
@x.query
('
for $fld in /Fields/Field
return <x>{concat(";"
,($fld/Name/text())[1]
,"="
,($fld/Value/text())[1])
}</x>
').value('.','nvarchar(max)'),1,1,'');
Идея вкратце:
Мы перебираем все поля и создаем совершенно новый XML этого формата
<x>;First=1</x>
<x>;Second=2</x>
<x>;Third=3</x>
Использование .value()
с .
в качестве XPath вернет весь контент (без тегов) в виде строки. STUFF()
используется, чтобы отрезать ведущий ;
.