SQL:使用XML Data查询列中的特定值

时间:2017-11-15 16:29:05

标签: sql sql-server xml

男孩,我一直在研究这个问题,但我只是没有得到它。对不起,如果我问一个问题已经准备好被问了一百万次,但是当你像我这样的菜鸟时很难理解,而且我的表中的值与其他人不一样我见过。所以这就是......

在我的SQL Server数据库中,我有一个包含所有列表的表,名为 ItemsEbay

ItemsEbay

每个项目的主要标识符都有一个名为ItemID的列ID值,所以我想根据需要引用它。

在该表中有一个名为 ItemSpecifics 的列,其中包含XML数据。 在 ItemSpecifics XML数据中,该节点是一个<Name> UPC 文本和随机值的节点:

XML UPC Node

我想要的是一个查询,它允许我搜索 ItemsEbay 表中具有我选择的特定 UPC 值的所有项目,例如例如1000100或10U100。

当我找到我查询的匹配值时,我希望能够使用新值不适用一次性替换它们。

1 个答案:

答案 0 :(得分:0)

首先:不要拍照!

我在这里所做的就是你的工作:How to create a MCVE

一个有两行的虚拟表,一行包含搜索的值,一行不包含

DECLARE @dummyTable TABLE(ID INT IDENTITY, ItemSpecifications XML);
INSERT INTO @dummyTable VALUES
 (N'<SelectedValues>
  <SelectedValue>
    <Name>TestName</Name>
    <Value>Xml1</Value>
  </SelectedValue>
  <SelectedValue>
    <Name>UPC</Name>
    <Value>123</Value><!--The UPC named value = 123 -->
  </SelectedValue>
</SelectedValues>')
,(N'<SelectedValues>
  <SelectedValue>
    <Name>TestName</Name>
    <Value>Xml2</Value>
  </SelectedValue>
  <SelectedValue>
    <Name>UPC</Name>
    <Value>999</Value><!--The UPC named value = 999 -->
  </SelectedValue>
</SelectedValues>');

- 我搜索“123”并希望将其替换为“SomeOther”

DECLARE @SearchFor VARCHAR(100)='123';
DECLARE @ReplaceWith VARCHAR(100)='SomeOther';

- 更新语句使用.modify()进行XML更改,.exist()检查<SelectedValue>下面的搜索值,<Name>元素的{{1} “123”:

text()

- 检查结果

UPDATE @dummyTable SET ItemSpecifications.modify(N'replace value of (/SelectedValues
                                                                     /SelectedValue[(Name/text())[1]="UPC"]
                                                                     /Value/text())[1] 
                                                           with sql:variable("@ReplaceWith")')
WHERE ItemSpecifications.exist(N'/SelectedValues
                                 /SelectedValue[(Name/text())[1]="UPC"]
                                 /Value[text()=sql:variable("@SearchFor")]')=1;