2009-09-21 5 views
0

J'envoie plusieurs éléments de données différents à une procédure stockée dans une variable XML. La signature de la fonction va quelque chose comme ceci:SQL: Comment sélectionner un élément XML dans une variable plus grande de type XML?

CREATE PROCEDURE MyProc 
    @id INT, 
    @xml xml 
AS 
BEGIN 
.... 
END 

et XML ressemble un peu à ceci:

<Root> 
    <SampleTime>2009-02-05 13:25:43</SampleTime> 
    <Gizmo1> 
    <Voltage>34.1</Voltage> 
    <Temperature>78.3</Temperature> 
    </Gizmo1> 
    <Gizmo2> 
     <Weight>235</Weight> 
     <Exposure>North</Exposure> 
    </Gizmo2> 
</Root> 

où les différents GizmoX contiennent des informations sans rapport. Quand je veux extraire un seul champ à partir du XML, j'ai eu assez bonne chance avec SELECT DE xml.Nodes(), comme dans

SELECT T.item.value('Voltage[1]', 'float') as Voltage 
FROM @xml.nodes('//Root/Gizmo1') T(item) 

Maintenant, le problème est que j'ai que je veux extraire le élément Gizmo entier dans une autre variable xml. La fonction values ​​() n'accepte pas le type de données 'xml', et je ne sais pas quoi choisir quand même.

Quelqu'un at-il une solution pour cela?

Répondre

1

Utilisation XQuery:

select @xml.query('//Root/Gizmo1') 
+0

Doh! Je vous remercie! –

Questions connexes