Каким будет правильный способ проанализировать следующий XML-блок в таблице SQL Server в соответствии с желаемым расположением (см. Ниже)? Можно ли сделать это с помощью одного оператора SELECT без UNION или цикла? Любые берущие? Заранее спасибо. Входной XML:Анализ вложенных XML-таблиц в таблицу SQL
<ObjectData>
<Parameter1>some value</Parameter1>
<Parameter2>other value</Parameter2>
<Dates>
<dateTime>2011-02-01T00:00:00</dateTime>
<dateTime>2011-03-01T00:00:00</dateTime>
<dateTime>2011-04-01T00:00:00</dateTime>
</Dates>
<Values>
<double>0.019974</double>
<double>0.005395</double>
<double>0.004854</double>
</Values>
<Description>
<string>this is row 1</string>
<string>this is row 2</string>
<string>this is row 3</string>
</Values>
</ObjectData>
Желаемая выходная таблица:
Parameter1 Parameter2 Dates Values Description
Some value Other value 2011-02-01 00:00:00.0 0.019974 this is row 1
Some value Other value 2011-03-01 00:00:00.0 0.005395 this is row 2
Some value Other value 2011-04-01 00:00:00.0 0.004854 this is row 3
Я после ЗЕЬЕСТ SQL с помощью OPENXML или xml.nodes() функциональность. Например, следующий оператор SELECT приводит к созданию между значениями и датами (это все перестановки значений и дат), чего я хочу избежать.
SELECT
doc.col.value('Parameter1[1]', 'varchar(20)') Parameter1,
doc.col.value('Parameter2[1]', 'varchar(20)') Parameter2,
doc1.col.value('.', 'datetime') Dates ,
doc2.col.value('.', 'float') [Values]
FROM
@xml.nodes('/ObjectData') doc(col),
@xml.nodes('/ObjectData/Dates/dateTime') doc1(col),
@xml.nodes('/ObjectData/Values/double') doc2(col);
Большое спасибо, Микаэль. Это хорошо работает! Синтаксис по-прежнему ошеломляет, я подумал, что это будет немного проще ... :) – Puzzled