Ver Mensaje Individual
  #13 (permalink)  
Antiguo 30/10/2006, 15:41
Avatar de Developer9
Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 1 mes
Puntos: 47
Cita:
Iniciado por foo Ver Mensaje
seguramente no buscas bien , aqui un ejemplo basado en la documentacion

declare @foo xml

set @foo = '<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>

<book>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>

</bookstore>'

-- Reemplazar el valor del atributo 'lang' del nodo 'title'
set @foo.modify ('
replace value of (/bookstore/book/title/@lang)[1]
with "test" ')

select @foo

HOla de nuevo foo

Estaba trabajando con esto de la actualizacion del xml y la funcion modify solo me permite utilizar cadenas de caracteres pero no me permite concatenar. En tu ejemplo reemplazas el atributo del nodo @lang con la palabra 'test'. Pero que pasa si yo lo quiero reemplazar con el valor de algúna variable, no me deja concatenar!

Estoy tratando de hacer esto:

Código:
declare @XmlCierraOrdenIngreso as xml
declare @VL_IdEmpresa as int
set @VL_IdEmpresa=99
set @XmlCierraOrdenIngreso='<?xml version="1.0" encoding="iso-8859-1"?><Usuario><ResultSet><Cabecera IdEmpresa="" IdOficina="" NumDocumento="" OrigenDocumentoInv="1"/><Detalle><Items IdDocumento="8"/><Items IdDocumento="7"/></Detalle></ResultSet></Usuario>'
SELECT @XmlCierraOrdenIngreso

SET @XmlCierraOrdenIngreso.modify('replace value of (/Usuario/ResultSet/Cabecera/@IdEmpresa)[1] with  "' + convert(varchar(max),@VL_IdEmpresa) + '"')
--SET @XmlCierraOrdenIngreso.modify('replace value of (/Usuario/ResultSet/Cabecera/@IdEmpresa)[1] with  "96"')
SELECT @XmlCierraOrdenIngreso
Y me sale el siguiente error en la linea en negrita:

The argument 1 of the xml data type method "modify" must be a string literal.

Creo estar concatenando dos cosas string.

Y si comento aquella linea y utilizo la linea siguiente, utilizando el valor 96 si funciona, si solo funciona así no tiene chiste

Alguna ayudita