如果你有这个xml
<AssetComponent name="AssetComponent4881" width="300">
<Asset id="5" type="1" />
</AssetComponent>
<AssetComponent name="AssetComponent4882" width="300">
<Asset id="5" type="1" />
</AssetComponent>
是否可以在一个查询中将所有ID从5替换为6?
使用此sql,只能替换当时的一个属性:
SET @myDoc.modify('
replace value of (//Asset/@id)[1]
with sql:variable("@BinaryAssetId")
')
从sql docs我可以看到,replace应该返回一个原子节点,只有一个,那么还有另外一种方法吗?
答案 0 :(得分:1)
我最后一次调查时,没有这样的方法 - replace
一次只对一个项目进行操作。我当时提出的(令人不快的)解决方案是(伪代码):
假设我们想要将记录从一个州改为另一个州;让我们将这些状态称为“从”状态(例如,具有Asset/@id = '5'
)和“到”状态(例如,具有Asset/@id = '6'
)。然后执行这个循环:
WHILE there exists a record that is in the 'from' state
BEGIN
Execute a .modify that changes the first record in the 'from' state
to being in the 'to' state
END
它不漂亮,但它有效。
答案 1 :(得分:1)
While(@Maxcount <> 0)
BEGIN
SET @myDoc.modify('
replace value of (//Asset/@id)[sql:variable("@Maxcount")]
with sql:variable("@BinaryAssetId")
')
SET @MaxCount = @MaxCount - 1
END