2013-06-21 3 views
0

Je souhaite décoder la colonne de données XML.SQL Server 2005 xmldata decode

Ma table (dailyReports) a une colonne col2 qui contient plus d'un rapport

(col1)  (col2) 
reportDate xmldata 
20130101 <t><m><s>234</s><ist>istanbul</ist><ino>17060</ino></m></t> --1 xml rep. 
20130102 <t><m><s>235</s><ist>izmir</ist><ino>12345</ino></m></t>... --3 xml rep 
20130103 <t><m><s>220</s><ist>ankara</ist><ino>98765</ino></m></t>... --7 xml rep. 
20130104 <t><m><s>234</s><ist>istanbul</ist><ino>17060</ino></m></t>... --4 xml rep. 
20130105 <t><m><s>138</s><ist>edirne</ist><ino>17171</ino></m></t>... --9 xml rep. 
... 

Je voudrais exporter les données; (Chaque rapport devrait aller à une nouvelle ligne)

col1  col2 col3 col4 
20130101 234 ist 17060 (first day 1 xml rep.) 
20130102 235 izmir 12345 (second day 3 xml rep.) 
20130102 220 ankara 98765 (second day 3 xml rep.) 
20130102 138 edirne 17171 (second day 3 xml rep.) 

...
7 lignes pour le troisième jour
4 lignes pour le quatrième jour
9 lignes pour le cinquième jour
..

Répondre

0

Utiliser l'opérateur de noeuds XQuery:

SELECT 
    reportDate, 
    T.t.value('(m/s)[1]', 'int'), 
    T.t.value('(m/ist)[1]', 'varchar(50)'), 
    T.t.value('(m/ino)[1]', 'int') 
FROM dailyReports D 
CROSS APPLY D.xmldata.nodes('t') T(t)