Задан элемент, определенный в коллекции XML-схем как таковой:
<xsd:element name="xid">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="32" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Как бы вы обновили элемент с помощью XQuery?
Элемент находится в пространстве имен ns в коллекции схем. Я пытался обновить элемент ниже запрос:
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
но это приводит к следующей ошибке:
Сообщение 9301, уровень 16, состояние 1, строка 2 XQuery [cm.item.data.modify ()]: в этой версии сервера функция «cast as» недоступна. Пожалуйста, используйте «приведение как?» синтаксис.
Если я удаляю приведение целиком и использую этот запрос:
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
Я получаю эту ошибку:
Сообщение 2247, уровень 16, состояние 1, строка 2 XQuery [cm.item.data.modify ()]: значение имеет тип «xs: string», который не является подтипом ожидаемого типа «<anonymous>».
Если я выпущу этот запрос:
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
Я получаю эту ошибку:
Msg 9312, уровень 16, состояние 1, строка 2 XQuery [cm.item.data.modify ()]: «text ()» не поддерживается для простых типов или « http://www.w3.org/2001/XMLSchema» #anyType 'elements, found' (element (ns { http://www.anon.com/ }: xid, # anonymous)?) * '.
Я ориентируюсь на SQL Server 2008 R2.
Спасибо!
источник