Biorąc pod uwagę element zdefiniowany w zbiorze schematów XML jako taki:
<xsd:element name="xid">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="32" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Jak zaktualizowałbyś element za pomocą XQuery?
Element znajduje się w przestrzeni nazw ns w kolekcji schematu. Próbowałem zaktualizować element poniższego zapytania:
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
ale generuje to następujący błąd:
Msg 9301, poziom 16, stan 1, wiersz 2 XQuery [cm.item.data.modify ()]: W tej wersji serwera opcja „rzutuj jako” jest niedostępna. Proszę użyć „cast as?” składnia.
Jeśli całkowicie usunę rzutowanie i użyję tego zapytania:
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
Otrzymuję ten błąd:
Wiadomość 2247, poziom 16, stan 1, wiersz 2 XQuery [cm.item.data.modify ()]: Wartość jest typu „xs: string”, który nie jest podtypem oczekiwanego typu „<anonimowy>”.
Jeśli wydam to zapytanie:
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
Otrzymuję ten błąd:
Msg 9312, poziom 16, stan 1, wiersz 2 XQuery [cm.item.data.modify ()]: „text ()” nie jest obsługiwany w typach prostych lub „ http://www.w3.org/2001/XMLSchema ” #anyType 'elements, found' (element (ns { http://www.anon.com/ }: xid, # anonimowy)?) * '.
Mam na celu SQL Server 2008 R2.
Dzięki!
źródło