Gegeben ein Element, das in einer XML-Schemasammlung als solches definiert ist:
<xsd:element name="xid">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="32" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Wie würden Sie das Element mit XQuery aktualisieren?
Das Element befindet sich im Namespace ns in der Schemasammlung. Ich habe versucht, das Element der folgenden Abfrage zu aktualisieren:
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
Dies erzeugt jedoch den folgenden Fehler:
Meldung 9301, Ebene 16, Status 1, Zeile 2 XQuery [cm.item.data.modify ()]: In dieser Version des Servers ist "Cast as" nicht verfügbar. Bitte verwenden Sie die "Besetzung als?" Syntax.
Wenn ich die Besetzung vollständig entferne und diese Abfrage verwende:
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
Ich erhalte diesen Fehler:
Meldung 2247, Ebene 16, Status 1, Zeile 2 XQuery [cm.item.data.modify ()]: Der Wert ist vom Typ "xs: string", der kein Subtyp des erwarteten Typs "<anonymous>" ist.
Wenn ich diese Abfrage stelle:
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
Ich erhalte diesen Fehler:
Meldung 9312, Ebene 16, Status 1, Zeile 2 XQuery [cm.item.data.modify ()]: 'text ()' wird bei einfacher Eingabe oder ' http://www.w3.org/2001/XMLSchema ' nicht unterstützt #anyType 'Elemente gefunden' (Element (ns { http://www.anon.com/ }: xid, # anonym)?) * '.
Ich ziele auf SQL Server 2008 R2.
Vielen Dank!
quelle