给定一个元素,在XML Schema Collection中定义如下:
<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
我收到此错误:
消息9312,级别16,状态1,第2行XQuery [cm.item.data.modify()]:“ text()”在简单类型或“ http://www.w3.org/2001/XMLSchema ”上不受支持#anyType '元素,找到'(element(ns { http://www.anon.com/}:xid,#anonymous)?)* '。
我的目标是SQL Server 2008 R2。
谢谢!