Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 如何用XQuery替换*所有*匹配元素的属性值?_Sql Server 2005_Xquery - Fatal编程技术网

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

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

我试图创建一个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;
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中的所有节点吗?如果是,您可以在一次操作中更新;否则,您需要多个“修改”操作