Я предполагаю, что ответ на мой вопрос будет чем-то простым, чего я сам не могу понять. Вот сценарий:
Я использую SQL Server 2008 R2, где в таблице есть столбец XML, в котором данные сохраняются в следующем формате:
<Person>
<firstName>John</firstName>
<lastName>Lewis</lastName>
</Person>
Узел Person
может иметь любое количество дочерних узлов, для которых имена элементов могут быть разными (заранее неизвестными). Я ищу запрос для возврата XML, который имеет значения для всех узлов в качестве атрибутов.
Таким образом, вывод для приведенного выше XML должен быть:
<Person firstName="John" lastName="Lewis"/>
Я не могу придумать запрос, чтобы получить вышеуказанный результат. Я не хочу использовать такой запрос, как
Select
PersonColumn.value('(/Person/firstName)[1]', 'varchar(100)') AS '@firstName'
, PersonColumn.value('(/Person/lastName)[1]', 'varchar(100)') AS '@lastName'
FROM MyTable
WHERE MyTable.MyPrimaryKey=1
FOR XML PATH('Person'), TYPE
поскольку я не знаю, какие узлы могут быть под узлом Person
.