Разбор вложенного XML в таблицу SQL

Каким будет правильный способ синтаксического анализа следующего блока XML в таблице SQL Server в соответствии с желаемой компоновкой (см. Ниже)? Можно ли сделать это с помощью одного оператора SELECT без UNION или цикла? Есть берущие? Заранее благодарим. Ввод XML:

<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-оператора SELECT с использованием функциональности 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);
5
задан Puzzled 8 November 2011 в 05:29
поделиться