2010-11-19 11 views
1

Was ist die SQL für die Auswahl der Werte aus diesem XML-Chunk wie im folgenden Beispiel getan?SQL Wählen Sie Daten aus XML-Parameter

<RWFCriteria reportType="OPRAProject"> 
    <item id="88" name="" value="" type="Project" /> 
    <item id="112" name="" value="12" type="Milestone" /> 
    <item id="43" name="" value="11" type="Milestone" /> 
</RWFCriteria> 

Ich möchte dies ähnlich wählen, aber mit den oben genannten XML-Daten

DECLARE @Param XML 
SET @Param = '<data> 
     <release id="1"><milestone id="1" /><milestone id="2" /></release> 
     <release id="3"><milestone id="1" /><milestone id="27"/></release> 
    </data>' 

SELECT c.value('../@id', 'INT') AS ReleaseId, c.value('@id', 'INT') AS MilestoneId 
FROM @Param.nodes('/data/release/milestone') AS T(c) 

Ich will nur die Daten in den Knoten, an denen type = „Milestone“

Antwort

3

Etwas wie folgt aus:

DECLARE @Param XML 
SET @Param = '<RWFCriteria reportType="OPRAProject"> 
       <item id="88" name="" value="" type="Project" /> 
       <item id="112" name="" value="12" type="Milestone" /> 
       <item id="43" name="" value="11" type="Milestone" /> 
       </RWFCriteria>' 


SELECT 
    RWF.item.value('@id', 'INT') AS 'Id', 
    RWF.item.value('@name', 'VARCHAR(100)') AS 'Name', 
    RWF.item.value('@value', 'INT') AS 'Value', 
    RWF.item.value('@type', 'VARCHAR(100)') AS 'Type' 
FROM 
    @Param.nodes('/RWFCriteria/item') AS RWF(item) 
WHERE 
    RWF.item.value('@type', 'VARCHAR(100)') = 'Milestone' 

resultierender Ausgang:

Id Name Value Type 
112   12 Milestone 
43   11 Milestone 
+0

gibt es eine Möglichkeit, ich kann nur die type = "Meilenstein" Knoten auswählen? – kacalapy

+1

Ja, am Ende hinzufügen: WHERE \t RWF.item.value ('@ type', 'VARCHAR (100)') = 'Meilenstein' – kevev22

+0

@kacalapy: sicher - meine Antwort aktualisiert, um nur den Typ = Meilenstein auszuwählen. –