1

MSSQL データベースに、スキーマが次のような XML 列があります。

<Form>
   <Version>1000</Version>
   <OtherValues />
</Form>

そして、(スクリプトを介して) すべての行のVersion番号を手動で 1001 に変更する必要があります。検索すると、XPath 関数を使用することになると推測でき.modifyますが、見つかったすべての例は、ノードを編集するためではなく、ノードを挿入するためのものでした。 .

誰かがこれを行う方法に光を当てることができますか?

4

1 に答える 1

5

データ設定例:

DECLARE @t TABLE (
    Id int
    , X xml
)

INSERT @t VALUES ( 1, '
<Form>
   <Version>1000</Version>
   <OtherValues />
</Form>
'
)

INSERT @t VALUES ( 2, '
<Form>
   <Version>1000</Version>
   <OtherValues />
</Form>
'
)

変更前データ:

SELECT * FROM @t

Id          X
----------- ------------------------------------------------------------
1           <Form><Version>1000</Version><OtherValues /></Form>
2           <Form><Version>1000</Version><OtherValues /></Form>

データ更新

UPDATE @t
SET X.modify('
replace value of 
    (/Form/Version[.="1000"]/text())[1]
with
    "1001"
')

変更後のデータ:

SELECT * FROM @t

Id          X
----------- ------------------------------------------------------------
1           <Form><Version>1001</Version><OtherValues /></Form>
2           <Form><Version>1001</Version><OtherValues /></Form>

注意事項:

  • replace value of'to-be- replaced ' 式が "static singleton" を識別する必要があります。[1]
  • !によって変更されるのは、(行ごとに) 1 つのノードだけです。.modifyしたがって、1 つの行に複数の XML ノードがある場合は、手動で反復する必要があります。
于 2011-04-13T15:11:58.963 に答える