Aşağıdaki XML bloğunu, istenen düzene göre (aşağıda) SQL Server tablosuna ayrıştırmada doğru yol ne olurdu? UNION veya döngü olmadan tek bir SELECT ifadesi ile yapmak mümkün mü? Herhangi bir katılımcı var mı? Şimdiden teşekkürler. Girdi XML:İç içe XML'yi SQL tabloya ayrıştırma
<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>
İstenilen tablo çıktı: Ben OPENXML veya xml.nodes() işlevini kullanarak bir SEÇ SQL deyiminde sonra ben
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
. Örneğin, aşağıdaki SELECT ifadesi, Değerler ve Tarihler (yani Değerlerin ve Tarihlerin tüm permütasyonları) arasındaki üretimle sonuçlanır; bu, kaçınmak istediğim bir şeydir. XML ayrıştırmak istiyorsa
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);
Çok teşekkür ederim Mikael. Gerçekten iyi çalışıyor! Sözdizimi hala akıl almaz, biraz daha basit olmasını hayal ettim ... :) – Puzzled