XQuery检索值

时间:2015-05-11 21:28:59

标签: sql sql-server xml xquery

我有以下T-SQL,它使用两个条件确定行是否存在:

Declare @x xml = '
    <row ParentID="45" ObjectID="0" Node="root.local.navigation[7]" itemKey="page" itemValue="Confirmation" itemType="string" />
    <row ParentID="45" ObjectID="0" Node="root.local.navigation[7]" itemKey="visited" itemValue="false" itemType="bool" />'

SELECT @x.exist('/row[@Node eq "root.local.navigation[7]"] and /row[@itemValue eq "Confirmation"]')

问题:鉴于上面的SELECT,如何选择第二行的itemValue? 即,因为Node =&#34; root.local.navigation [7]&#34;和itemValue =&#34;确认&#34;,返回节点相同且itemKey =&#34;访问&#34;?

的行中的itemType值

1 个答案:

答案 0 :(得分:1)

这个怎么样:

declare @x xml = '
<row ParentID="45" ObjectID="0" Node="root.local.navigation[7]" itemKey="page" itemValue="Confirmation" itemType="string" />
<row ParentID="45" ObjectID="0" Node="root.local.navigation[7]" itemKey="visited" itemValue="false" itemType="bool" />'

select case when @x.exist('/row[@Node eq "root.local.navigation[7]"] and /row[@itemValue eq "Confirmation"]') = 1 
    then @x.value('/row[@Node eq "root.local.navigation[7]" and @itemKey eq "visited"][1]/@itemType', 'varchar(50)') 
end as item_type