Dato un elemento, definito all'interno di una raccolta di schemi XML in quanto tale:
<xsd:element name="xid">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="32" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Come aggiorneresti l'elemento usando XQuery?
L'elemento si trova nello spazio dei nomi ns nella raccolta dello schema. Ho cercato di aggiornare l'elemento la query seguente:
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
ma questo genera il seguente errore:
Messaggio 9301, livello 16, stato 1, riga 2 XQuery [cm.item.data.modify ()]: in questa versione del server, "cast as" non è disponibile. Si prega di utilizzare il 'cast come?' sintassi.
Se rimuovo completamente il cast e utilizzo questa query:
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
Ottengo questo errore:
Messaggio 2247, livello 16, stato 1, riga 2 XQuery [cm.item.data.modify ()]: il valore è di tipo "xs: string", che non è un sottotipo del tipo previsto "<anonimo>".
Se invio questa query:
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
Ottengo questo errore:
Messaggio 9312, livello 16, stato 1, riga 2 XQuery [cm.item.data.modify ()]: 'text ()' non è supportato su un semplice tipo o ' http://www.w3.org/2001/XMLSchema #anyType 'elements, found' (element (ns { http://www.anon.com/ }: xid, # anonymous)?) * '.
Sto prendendo di mira SQL Server 2008 R2.
Grazie!