2013-08-16 57 views
5

我在查詢存儲在SQL Server 2012數據庫中的XML數據時遇到問題。節點樹我想查詢是按以下格式 -使用SQL查詢XML數據列

<eForm> 
    <page id="equalities" visited="true" complete="true"> 
     <Belief> 
     <item selected="True" value="Christian">Christian</item> 
     <item selected="False" value="Jewish">Jewish</item> 
     ... 
     </Belief> 
    </page> 
</eForm> 

我想要做的就是回到所選擇的屬性等於true,則項目節點的值屬性。我已經閱讀了幾篇有關在SQL中查詢XML的教程,但似乎無法獲得正確的代碼。

感謝 斯圖

回答

4

DEMO

SELECT [value].query('data(eForm/page/Belief/item[@selected="True"]/@value)') 
FROM test 
+0

謝謝你,我是不是包裝在數據() – StuartO

+1

一個小紙條,這將是XML類型,而不是爲varchar –

+0

看到http://sqlfiddle.com/#中的XPath! 6/ddaf2/2 –

0
DECLARE @T TABLE (X XML); 
INSERT @T VALUES ('<eForm> 
         <page id="equalities" visited="true" complete="true"> 
          <Belief> 
          <item selected="True" value="Christian">Christian</item> 
          <item selected="False" value="Jewish">Jewish</item> 
          </Belief> 
         </page> 
        </eForm>') 

SELECT item.value('item[1]', 'NVARCHAR(50)')  
FROM @T 
     CROSS APPLY X.nodes('eForm/page/Belief') i (item) 
WHERE item.value('(item[1]/@selected)[1]', 'VARCHAR(5)') = 'true'; 

注:

我其實更喜歡MarcinJuraszek發佈的另一種方法,但是如果您需要進一步提取數據,下面可能會有好處。我最初刪除了答案,但可能會出現這種方法很有用的情況,所以爲了顯示我已刪除的所有選項的興趣。

1
select 
    Value.value('(eForm/page/Belief/item[@selected="True"])[1]/@value', 'nvarchar(max)')  
from test 

sql fiddle demo