XML 列を含むテーブルがあり、xml を更新して属性を挿入するか、属性が既に存在する場合は属性値を変更したいと考えています。
開始 xml が次のようであるとしましょう: < d />
挿入:
UPDATE Table
set XmlCol.modify('insert attribute att {"1"} into /d[1]')
変化:
UPDATE Table
set XmlCol.modify('replace value of /d[1]/@att with "1"')
属性が既に存在する場合、insert は失敗し、属性が存在しない場合、replace は失敗します。「if」を使用しようとしましたが、うまくいかないと思います。「XQuery [modify()]:「属性」付近の構文エラー、「else」が必要です。」
IF試行
UPDATE Table
set XmlCol.modify('if empty(/d[1]/@att)
then insert attribute att {"1"} into /d[1]
else replace value of /d[1]/@att with "1"')
現在、xml を変数に選択し、T-SQL を使用してそれを変更し、新しい xml で列を更新します。これには、トランザクションで行をロックする必要があり、おそらく DB のコストが高くなります。