2014-10-06 53 views
0

我有一个数据库中的XML列具有以下搜索XML数据在MS SQL

<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要返回的值。所以,当我在寻找MFR我正在寻找的结果索尼

我已经试过这

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

哪个不工作,只显示有MFR在XML列的结果,但它给我的在这种情况下的第一个值'新'。如果我将[1]更改为[5]。我确实得到了这个例子的正确结果,但它并不总是处于这个位置。

回答

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

+0

需要[1]但工作完美 – James 2014-10-06 17:56:21

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