2 Stimmen

Aktualisieren eines XML-Knotens (in einer XML-Spalte) in SQL Server 2005 mit einem anderen Spaltenwert in derselben Zeile

Ich habe eine temporäre Tabelle mit einer XML Spalte ( XMLColumn ) und eine VARCHAR Spalte ( ABCColumn ).

Ich versuche, den Wert eines bestimmten XML-Knotens innerhalb von XMLColumn mit dem Wert, der sich in ABCColumn der gleichen Reihe. Ich muss dies für jede Zeile in der temporären Tabelle tun. Ist dies möglich, ohne einen Cursor zu tun, der den Ersatzwert für jeden Abruf halten würde?

Ich habe versucht, eine Aktualisierung der temporären Tabelle mit

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

aber ich habe in diesem Fall keine Variable. Ich muss den Wert einer XYZColumn und verwenden ihn als Ersatzwert. Jedes Beispiel, das ich gesehen habe, verwendet entweder eine Variable oder einen fest codierten Wert - nicht einen Spaltenwert derselben Zeile.

Außerdem verwende ich SQL Server 2005. Hat jemand eine Idee?

4voto

RBarryYoung Punkte 53364

Zum Beispiel so:

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

(Dank an Andromar; ich habe gerade seine Antwort bearbeitet und sein SQLFiddle verwendet, (das auch für dieses funktioniert.))

3voto

Andomar Punkte 224164

EDIT: Ich habe für die Antwort von RBarryYoung gestimmt, verwenden Sie diese stattdessen!

Die einzige Möglichkeit, die ich mir vorstellen kann, ist ein Cursor:

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

Beispiel bei SQL Fiddle.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X