Đưa ra một yếu tố, được định nghĩa trong Bộ sưu tập Lược đồ XML như sau:
<xsd:element name="xid">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="32" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Làm thế nào bạn sẽ cập nhật phần tử bằng XQuery?
Phần tử được tìm thấy trong không gian tên ns trong bộ sưu tập lược đồ. Tôi đã cố gắng cập nhật phần tử truy vấn bên dưới:
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
nhưng điều này tạo ra lỗi sau:
Msg 9301, Cấp 16, Trạng thái 1, Dòng 2 XQuery [cm.item.data.modify ()]: Trong phiên bản này của máy chủ, 'cast as' không khả dụng. Vui lòng sử dụng 'cast as?' cú pháp.
Nếu tôi loại bỏ toàn bộ diễn viên và sử dụng truy vấn này:
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
Tôi nhận được lỗi này:
Msg 2247, Cấp 16, Trạng thái 1, Dòng 2 XQuery [cm.item.data.modify ()]: Giá trị thuộc loại "xs: chuỗi", không phải là kiểu con của loại dự kiến "<nặc danh>".
Nếu tôi đưa ra truy vấn này:
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
Tôi nhận được lỗi này:
Msg 9312, Cấp 16, Trạng thái 1, Dòng 2 XQuery [cm.item.data.modify ()]: 'text ()' không được hỗ trợ trên cách gõ đơn giản hoặc ' http://www.w3.org/2001/XMLSchema #anyType 'phần tử, được tìm thấy' (phần tử (ns { http://www.anon.com/ }: xid, # nặc danh)?) * '.
Tôi đang nhắm mục tiêu SQL Server 2008 R2.
Cảm ơn!