Étant donné un élément, défini dans une collection de schémas XML comme tel:
<xsd:element name="xid">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="32" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Comment mettriez-vous à jour l'élément en utilisant XQuery?
L'élément se trouve dans l' espace de noms ns dans la collection de schémas. J'ai essayé de mettre à jour l'élément la requête ci-dessous:
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
mais cela génère l'erreur suivante:
Msg 9301, niveau 16, état 1, ligne 2 XQuery [cm.item.data.modify ()]: dans cette version du serveur, «cast as» n'est pas disponible. Veuillez utiliser le 'cast as?' syntaxe.
Si je supprime entièrement le casting et utilise cette requête:
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
Je reçois cette erreur:
Msg 2247, niveau 16, état 1, ligne 2 XQuery [cm.item.data.modify ()]: la valeur est de type "xs: string", qui n'est pas un sous-type du type attendu "<anonymous>".
Si j'émets cette requête:
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
Je reçois cette erreur:
Msg 9312, niveau 16, état 1, ligne 2 XQuery [cm.item.data.modify ()]: 'text ()' n'est pas pris en charge sur les types simples ou ' http://www.w3.org/2001/XMLSchema #anyType 'elements, found' (element (ns { http://www.anon.com/ }: xid, # anonyme)?) * '.
Je cible SQL Server 2008 R2.
Merci!
la source