SQL выбрать данные из XML-параметра - PullRequest
1 голос
/ 19 ноября 2010

Каков SQL для выбора значений из этого фрагмента XML, как это сделано в приведенном ниже примере?

<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>

Я хочу выбрать аналогично этому, но с указанными выше данными XML

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)

Мне нужны только данные в узлах, где type = "Milestone"

1 Ответ

3 голосов
/ 19 ноября 2010

Примерно так:

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'

Результирующий вывод:

Id  Name    Value   Type
112           12    Milestone
 43           11    Milestone
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...