Sql server 2005 如何用XQuery替换*所有*匹配元素的属性值?
我试图创建一个modify()语句来更改具有该属性值的所有元素中属性的值,但运气不好——到目前为止,我只能让它更改第一个匹配元素中的值。我在下面创建了一个示例,它是我目前在SQL Server 2005中运行的示例:Sql server 2005 如何用XQuery替换*所有*匹配元素的属性值?,sql-server-2005,xquery,Sql Server 2005,Xquery,我试图创建一个modify()语句来更改具有该属性值的所有元素中属性的值,但运气不好——到目前为止,我只能让它更改第一个匹配元素中的值。我在下面创建了一个示例,它是我目前在SQL Server 2005中运行的示例: DECLARE @x XML SELECT @x = ' <FootballApparel> <Item Team="Phoenix Cardinals" Type="Hat" Cost="$14.99" /> <Item Team="Indi
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;
DECLARE@xxml
选择@x=
';
设置@x.modify('s)
替代价值
(/FootballApparel/Item[@Team=“Phoenix Cardinals”]/@Team)[1]
“亚利桑那红衣主教”
');
选择@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()语句替换所有实例吗
谢谢Kevin您非常接近-您需要做的是循环(在这种情况下,我知道没有其他方法可以这样做)并重复替换值:
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")
');
这应该能奏效
Marc嗨,Marc,我必须更新数据库中的多个节点。那么,可以使用一条xml语句吗?或者我需要为所有节点编写您上面解释的语句?@Radhi:您能在一个XPath语句中选择XML中的所有节点吗?如果是,您可以在一次操作中更新;否则,您需要多个“修改”操作