¿Cuál sería la forma correcta de analizar el siguiente bloque XML en la tabla de SQL Server de acuerdo con el diseño deseado (abajo)? ¿Es posible hacerlo con una sola instrucción SELECT, sin UNIÓN o un bucle? ¿Ningún arrendatario? Gracias por adelantado. XML de entrada:Analizando XML anidado en la tabla 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>
deseado salida de la tabla:
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
yo después de una instrucción SQL SELECT que utiliza OPENXML o xml.nodes() funcionalidad. Por ejemplo, la siguiente declaración SELECT da como resultado producción entre Valores y Fechas (es decir, todas las permutaciones de Valores y Fechas), que es algo que quiero evitar.
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);
Muchas gracias, Mikael. ¡Funciona bien! La sintaxis sigue siendo alucinante, me imaginaba que sería un poco más simple ... :) – Puzzled