2010-12-14 10 views
2

SQL Server 2005でXQueryを使用して、列に保存されたxmlを更新しようとしています。ここで私が更新する必要があるデータのサンプルです。Xqueryを使用してxsi:nil = "true"というノード値を置き換えます。

<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を見たとき、それは変更されていない、と私はそれを動作させるために修正する必要があるかを把握することはできません。何らかの違いがあれば、ノードは型なしです。

答えて

4

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 

が..you'llその後、nil="true"属性を削除する必要が

てみ挿入... ..多分このような

何か..

update tbl_Archive set XML.modify('delete /*:Document/*:Volume[text()]/@xsi:nil') 
+0

うん、これはやりましたそれ。ありがとう! –

関連する問題