男孩,我一直在研究这个问题,但我只是没有得到它。对不起,如果我问一个问题已经准备好被问了一百万次,但是当你像我这样的菜鸟时很难理解,而且我的表中的值与其他人不一样我见过。所以这就是......
在我的SQL Server数据库中,我有一个包含所有列表的表,名为 ItemsEbay 。
每个项目的主要标识符都有一个名为ItemID的列ID值,所以我想根据需要引用它。
在该表中有一个名为 ItemSpecifics 的列,其中包含XML数据。
在 ItemSpecifics XML数据中,该节点是一个<Name>
UPC 文本和随机值的节点:
我想要的是一个查询,它允许我搜索 ItemsEbay 表中具有我选择的特定 UPC 值的所有项目,例如例如1000100或10U100。
当我找到我查询的匹配值时,我希望能够使用新值不适用一次性替换它们。
答案 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;