在MS SQL中搜索XML数据

时间:2014-10-06 17:09:42

标签: sql-server xquery

我在数据库中有一个XML列,其中包含以下内容

<SelectedValues haveDefaultsBeenSet="true">
  <SelectedValue>
    <Name>Item Condition</Name>
    <Value>New</Value>
    <ValueID>1000</ValueID>
  </SelectedValue>
  <SelectedValue>
    <Name>Brand</Name>
    <Value>Sony</Value>
  </SelectedValue>
  <SelectedValue>
    <Name>MPN</Name>
    <Value>8</Value>
  </SelectedValue>
  <SelectedValue>
    <Name>Model</Name>
    <Value>DVD</Value>
  </SelectedValue>
  <SelectedValue>
    <Name>MFR</Name>
    <Value>Sony</Value>
  </SelectedValue>
  <SelectedValue>
    <Name>PackQuantity</Name>
    <Value>3</Value>
  </SelectedValue>
</SelectedValues>

我试图在名称与MFR匹配时返回Value。因此,当我在寻找MFR时,我正在寻找索尼的结果

我试过这个

SELECT Itemspecifics.value('(/SelectedValues/SelectedValue/Value)[1]', 'varchar(max)') as MFR
FROM [SixBit_BT].[dbo].[ItemsEbay]
Where itemspecifics.exist('//.[text()="MFR"]') = 1

哪个只能在XML列中显示具有MFR的结果,但它在这种情况下为我提供了第一个值&#39; New&#39;。如果我将[1]更改为[5]。我确实得到了这个例子的正确结果,但并不总是在那个位置。

2 个答案:

答案 0 :(得分:1)

我的xpath有点生疏,但我想你想要这样的东西:

'(/SelectedValues/SelectedValue[Name="MFR"]/Value)[1]'

或者就是这个,因为它应该给你一个单项

'/SelectedValues/SelectedValue[Name="MFR"]/Value'

这是一个类似的xpath示例,用于小理智检查,因为我现在无法自己测试这个: How to get value through xpath for repeating tags,it's like key value pair

答案 1 :(得分:0)

您的代码只选择第一个Value节点,而不是第一个匹配“MFR”的节点。请改用:

SELECT Itemspecifics.query('//SelectedValue[Name = "MFR"]/Value').value('.[1]','varchar(max)')
FROM [SixBit_BT].[dbo].[ItemsEbay]
Where itemspecifics.exist('//.[text()="MFR"]') = 1