Frage

Ich versuche, XQuery in SQL Server 2005 zu aktualisieren xml in einer Spalte gespeichert zu verwenden. Hier ist ein Beispiel der Daten, die ich aktualisieren müssen.

<Length>3</Length>
<Width>5</Width>
<Depth>6</Depth>
<Area xsi:nil="true" />
<Volume xsi:nil="true" />

Ich brauche die Fläche und das Volumen auf Werte aus einer anderen Tabelle zu setzen. Ich bin ein CTE für das Update zu schaffen. Es ist eine andere Logik, dass ich weggelassen habe, aber ich habe festgestellt, dass der WAK die richtigen Daten für das Update enthält:

;with Volume (DocumentID, Volume) As
(
  Select DocumentID, Volume from tbl
)

, und ich bin mit der folgenden XQuery-SQL-Anweisung, um zu versuchen, die Tabelle zu aktualisieren.

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

Ich erhalte 1 Zeile betroffen, aber wenn ich auf der XML aussehen hat es sich nicht geändert, und ich kann nicht herausfinden, was repariert werden muss, damit es funktioniert. Der Knoten ist nicht typisiert, wenn das einen Unterschied macht.

War es hilfreich?

Lösung

Update wird nicht funktionieren, wenn es kein Text zu ersetzen .. die XPath /x:Document/x:Volume/text())[1] wird eine leere Menge zurück.

Versuchen Einsatz ...

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

.. Sie werden dann müssen die nil="true" Attribut entfernen ..

So etwas wie dies vielleicht ..

 update tbl_Archive set XML.modify('delete /*:Document/*:Volume[text()]/@xsi:nil')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top