我在查询存储在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的教程,但似乎无法使代码正确。
由于 斯图
答案 0 :(得分:4)
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
答案 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发布的其他方法,但如果您需要提取更多数据,可能会有以下优势。我最初删除了答案,但可能会出现这种方法很有用的情况,以便显示我已取消删除的所有选项。