2010-06-15 7 views
0

J'ai une table qui contient des métadonnées dans un champ XML.Requête SQL Server Un champ XML

Par exemple

<Meta> 
    <From>[email protected]</From> 
    <To> 
     <Address>[email protected]</Address> 
     <Address>[email protected]</Address> 
    </To> 
    <Subject>ESubject Goes Here</Subject> 
</Meta> 

Je veux alors être en mesure d'interroger ce champ pour retourner les résultats suivants

From     To     Subject 
[email protected]   [email protected] Subject Goes Here 
[email protected]   [email protected]   Subject Goes Here 

J'ai écrit la requête suivante

SELECT 
    MetaData.query('data(/Meta/From)') AS [From], 
    MetaData.query('data(/Meta/To/Address)') AS [To], 
    MetaData.query('data(/Meta/Subject)') AS [Subject] 
FROM 
    Documents 

Cependant cela ne renvoie qu'un seul enregistrement pour ce champ XML. Il combine les deux adresses en un résultat. Est-il possible de diviser ces éléments en enregistrements séparés?

Le résultat que je reçois est

From     To       Subject 
[email protected]   [email protected] [email protected] Subject Goes Here 

Merci

Gav

Répondre

0

Vous devez retourner le XML et l'analyser en utilisant quelque chose comme le code suivant:

StringReader stream = new StringReader(stringFromSQL); 
XmlReader reader = XmlReader.Create(stream); 

while (reader.Read()) 
{ 
    // Do stuff 
} 

stringFromSQL est la chaîne entière lue à partir de votre table.