使用SQL查询XML数据列

时间:2013-08-16 09:57:09

标签: sql xml sql-server-2012 sqlxml

我在查询存储在SQL Server 2012数据库中的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>

我想要做的是返回item节点的value属性,其中selected属性等于true。我已经阅读了几篇关于在SQL中查询XML的教程,但似乎无法使代码正确。

由于 斯图

3 个答案:

答案 0 :(得分:4)

DEMO

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

答案 1 :(得分:1)

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

sql fiddle demo

答案 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';

N.B。

我实际上更喜欢MarcinJuraszek发布的其他方法,但如果您需要提取更多数据,可能会有以下优势。我最初删除了答案,但可能会出现这种方法很有用的情况,以便显示我已取消删除的所有选项。