2

列()と列XMLXMLColumn)を持つ一時テーブルがあります。 VARCHARABCColumn

XMLColumn内の特定のXMLノードの値をABCColumn同じ行の値に置き換えようとしています。一時テーブル内のすべての行に対してこれを行う必要があります。これは、各フェッチの置換値を保持するカーソルなしで実行できますか?

を使用して一時テーブルを更新してみました

XmlColumn.modify('replace value of ... with ...')

しかし、この場合、私は変数を持っていません。aの値を取得し、XYZColumnそれを置換値として使用する必要があります。私が見たすべての例では、同じ行の列値ではなく、変数またはハードコードされた値のいずれかを使用しています。

また、SQL Server 2005を使用しています。誰かアイデアはありますか?

4

2 に答える 2

3

このような:

UPDATE  YourTable
SET     xml_col.modify(
    'replace value of (/root/val/text())[1] with sql:column("val_col")'
    )

(Andromarに感謝します。私は彼の答えを編集し、彼のSQLFiddleを使用しました(これも機能します)。)

于 2012-04-22T20:09:16.710 に答える
3

編集: RBarryYoung の回答に投票しました。代わりにそれを使用してください!

私が考えることができる唯一の方法はカーソルです:

declare cur_t cursor for (select id, val_col from YourTable)
declare @id int
declare @val int
open cur_t

fetch cur_t into @id, @val
while @@fetch_status = 0
    begin
    update  YourTable
    set     xml_col.modify(
        'replace value of (/root/val/text())[1] with sql:variable("@val")')
    where   id = @id
    fetch cur_t into @id, @val
    end  

close cur_t
deallocate cur_t

SQL Fiddle の例。

于 2012-04-22T19:54:39.757 に答える