Pregunta

Estoy tratando de utilizar XQuery en SQL Server 2005 para la actualización XML guardado en una columna. Este es un ejemplo de los datos que necesito para actualización.

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

necesito para establecer el área y el volumen de valores de una tabla diferente. Estoy creando un CTE para la actualización. Hay otra lógica que he omitido, pero he comprobado que el CTE contiene los datos correctos para la actualización:

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

y estoy usando la siguiente sentencia XQuery SQL para tratar de actualizar la tabla.

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

recibo 1 fila afectada, pero cuando miro el XML no ha cambiado, y no puedo averiguar lo que necesita ser arreglado para hacer que funcione. El nodo no tiene tipo, si hay alguna diferencia.

¿Fue útil?

Solución

Actualizar no funcionará si no hay texto para reemplazar el .. /x:Document/x:Volume/text())[1] XPath devolverá un conjunto vacío.

Trate de inserción ...

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

.. A continuación, tendrá que quitar el atributo nil="true" ..

Algo como esto tal vez ..

 update tbl_Archive set XML.modify('delete /*:Document/*:Volume[text()]/@xsi:nil')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top