Dado un elemento, definido dentro de una Colección de Esquema XML como tal:
<xsd:element name="xid">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="32" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
¿Cómo actualizarías el elemento usando XQuery?
El elemento se encuentra dentro del espacio de nombres ns en la colección de esquemas. He estado tratando de actualizar el elemento de la consulta a continuación:
update cm.item
set data.modify(
'declare namespace ns="http://www.anon.com";
replace value of (/ns:*/ns:xid)[1] with "X00011793" cast as element(ns{http://www.anon.com}:xid,#anonymous) ?')
where id = 11793
pero esto genera el siguiente error:
Mensaje 9301, Nivel 16, Estado 1, Línea 2 XQuery [cm.item.data.modify ()]: en esta versión del servidor, 'transmitir como' no está disponible. Por favor, use el 'elenco como?' sintaxis.
Si elimino el elenco por completo y uso esta consulta:
update cm.item
set data.modify(
'declare namespace ns="http://www.anon.com";
replace value of (/ns:*/ns:xid)[1] with "X00011793"')
where id = 11793
Me sale este error:
Mensaje 2247, Nivel 16, Estado 1, Línea 2 XQuery [cm.item.data.modify ()]: El valor es del tipo "xs: string", que no es un subtipo del tipo esperado "<anónimo>".
Si publico esta consulta:
update cm.item
set data.modify(
'declare namespace ns="http://www.anon.com/";
replace value of (/ns:*/ns:xid/text())[1] with "X00011793"')
where id = 11793
Me sale este error:
Msg 9312, Nivel 16, Estado 1, Línea 2 XQuery [cm.item.data.modify ()]: 'text ()' no es compatible con mecanografía simple o ' http://www.w3.org/2001/XMLSchema #anyType 'elementos, encontrados' (elemento (ns { http://www.anon.com/ }: xid, # anónimo)?) * '.
Estoy apuntando a SQL Server 2008 R2.
¡Gracias!
fuente