質問

SQL Server 2005 で XQuery を使用して、列に保存されている XML を更新しようとしています。これは更新する必要があるデータのサンプルです。

<Length>3</Length>
<Width>5</Width>
<Depth>6</Depth>
<Area xsi:nil="true" />
<Volume xsi:nil="true" />

面積と体積を別のテーブルの値に設定する必要があります。アップデート用の CTE を作成しています。省略したロジックは他にもありますが、CTE に更新用の正しいデータが含まれていることを確認しました。

;with Volume (DocumentID, Volume) As
(
  Select DocumentID, Volume from tbl
)

次の XQuery SQL ステートメントを使用してテーブルを更新しようとしています。

UPDATE tbl_Archive
   SET XML.modify(' declare namespace x="http://www.redacted.com";
   replace value of  (/x:Document/x:Volume/text())[1]
   with sql:column("Volume.Volume")')
    From Volume where volume.documentID = tbl_Archive.DocumentID

1 行が影響を受けていますが、XML を見ると変更されておらず、機能させるために何を修正する必要があるのか​​わかりません。それが違いを生む場合、ノードは型指定されていません。

役に立ちましたか?

解決

置換するテキストがない場合、更新は機能しません。XPath /x:Document/x:Volume/text())[1] 空のセットを返します。

挿入してみてください...

UPDATE tbl_Archive
   SET XML.modify(' declare namespace x="http://www.redacted.com";
   insert text {sql:column("Volume.Volume")}
   as first into  (/x:Document/x:Volume)[1]')
    From Volume where volume.documentID = tbl_Archive.DocumentID

..その後、削除する必要があります nil="true" 属性..

こんな感じかも…。

 update tbl_Archive set XML.modify('delete /*:Document/*:Volume[text()]/@xsi:nil')
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top