gpt4 book ai didi

sql-server-2005 - 如何用 XQuery 替换*所有*匹配元素的属性值?

转载 作者:行者123 更新时间:2023-12-01 12:01:00 24 4
gpt4 key购买 nike

我正在尝试创建一个 modify() 语句来更改具有该属性值的所有元素中的属性值,但没有成功——到目前为止,我只能让它更改第一个匹配元素中的值。我在下面创建了一个示例,说明我目前在 SQL Server 2005 中运行的示例:

DECLARE @x XML
SELECT @x = '
<FootballApparel>
<Item Team="Phoenix Cardinals" Type="Hat" Cost="$14.99" />
<Item Team="Indianapolis Colts" Type="Hat" Cost="$14.99" />
<Item Team="Cincinnati Bengals" Type="Hat" Cost="$14.99" />
<Item Team="Phoenix Cardinals" Type="Shirt" Cost="$21.99" />
<Item Team="Indianapolis Colts" Type="Shirt" Cost="$21.99" />
<Item Team="Cincinnati Bengals" Type="Shirt" Cost="$21.99" />
</FootballApparel>
';

SET @x.modify('
replace value of
(/FootballApparel/Item[@Team="Phoenix Cardinals"]/@Team)[1]
with "Arizona Cardinals"
');

SELECT @x;

运行它会得到以下结果——只有 Phoenix Cardinals 的第一个实例发生了变化。

<FootballApparel>
<Item Team="Arizona Cardinals" Type="Hat" Cost="$14.99" />
<Item Team="Indianapolis Colts" Type="Hat" Cost="$14.99" />
<Item Team="Cincinnati Bengals" Type="Hat" Cost="$14.99" />
<Item Team="Phoenix Cardinals" Type="Shirt" Cost="$21.99" />
<Item Team="Indianapolis Colts" Type="Shirt" Cost="$21.99" />
<Item Team="Cincinnati Bengals" Type="Shirt" Cost="$21.99" />
</FootballApparel>

你能帮我用正确的 modify() 语句替换所有实例吗?

谢谢!
凯文

最佳答案

你非常接近 - 你需要做的是循环(在这种情况下我没有其他方法可以做到这一点)并重复替换值:

WHILE @x.exist('(/FootballApparel/Item[@Team=sql:variable("@oldTeamName")])[1]') = 1
SET @x.modify('
replace value of (
/FootballApparel/Item[@Team=sql:variable("@oldTeamName")]/@Team
)[1]
with sql:variable("@newTeamName")
');

这应该可以解决问题。

马克

关于sql-server-2005 - 如何用 XQuery 替换*所有*匹配元素的属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1566714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com