XML 列のノード属性を更新しようとしていますが、行き詰まっています。確かに、XQueryは 1 日前まで私にとってホワイト ノイズでした。私はもう少し頑張ることができましたが、それは私の顧客を傷つけるでしょう。私はSOを上下にトロールしましたが、それでも立ち往生しています。
だからここに私のセットアップの関連部分があります:
テーブル:
CREATE TABLE Tbl(Id int IDENTITY, XmlCol XML)
INSERT Tbl VALUES(
'<root>
<item ID="1">some text input</item>
<item ID="7" PROP="10">1</item>
</root>
'
)
INSERT Tbl VALUES(
'<root>
<item ID="1">some other text input</item>
<item ID="8" PROP="10">1</item>
</root>
'
)
環境?理由は聞かないでください。あまりにもわざとらしく、意味を理解しようとすると行き詰まってしまうでしょう。
ID 属性が「8」のすべてのアイテム ノードについて、PROP 属性を 30 増やす必要があります。それが完了したら、一致するノードの ID 属性を「8」から「7」に更新し、アイテムを効果的にマージする必要があります。 、PROP 値を別々に保ちます。
これは私が得た限りではありますが、SQL Server (または私) はうまく機能していません。
更新ステートメント:
DECLARE @newVal INT = 40
update Tbl
set XmlCol.modify('replace value of (/root/item[@ID="8"][@PROP="10"]/@PROP)[1]
with sql:variable("@newVal") ')
結果:
XQuery [Tbl.XMLCol.modify()]: ")" が予期されていました。
誰?