У меня довольно большой опыт работы с запросами SQL Server «выбрать путь XML», но теперь я столкнулся со странной проблемой.
Следующий запрос работает нормально:
select
(
select
'Keyfield1' as "@Name",
t1.Keyfield1 as "Value"
from MyTable t1
where
t1.KeyField1= t2.KeyField1 and
t1.KeyField2= t2.KeyField2
for xml path('Field'),type, elements
) as 'Key'
from MyTable t2
for XML path('Path') , elements XSINIL, root('Root')
Это приведет (для фиктивного набора данных) к следующему XML:
<Root>
<Path>
<Key Name="KeyField1">
<Value>DummyValue1</Value>
</Key>
</Path>
</Root>
В моем результате этого (часть большего) утверждения мне также нужно второе ключевое поле:
<Root>
<Path>
<Key Name="KeyField1">
<Value>DummyValue1</Value>
</Key>
<Key Name="KeyField2">
<Value>DummyValue2</Value>
</Key>
</Path>
</Root>
Поэтому я изменил свой (под) запрос с помощью union-select на:
select
(
select
'Keyfield1' as "@Name",
t1.Keyfield1 as "Value"
union all
select
'Keyfield2' as "@Name",
t1.Keyfield2 as "Value"
from MyTable t1
where
t1.KeyField1= t2.KeyField1 and
t1.KeyField2= t2.KeyField2
for xml path('Field'),type, elements
) as 'Key'
from MyTable t2
for XML path('Path') , elements XSINIL, root('Root')
Но теперь я получаю сообщение об ошибке "В списке выбора можно указать только одно выражение, когда подзапрос не введен с EXISTS."
Я знаю, что в подзапросе может быть несколько записей, для которых путь XML приводит к нескольким элементам. Но я не понимаю, почему это не может быть сделано с помощью союза.
Может ли кто-нибудь указать мне правильное направление, как выполнить XML с помощью двух ключевых полей в моем (под) запросе?
Большое спасибо.