Tôi có một xml đơn giản trong một cột XMLCập nhật cột xml SQL server bằng XQUERY?
<Bands>
<Band>
<Name>beatles</Name>
<Num>4</Num>
<Score>5</Score>
</Band>
<Band>
<Name>doors</Name>
<Num>4</Num>
<Score>3</Score>
</Band>
</Bands>
Tôi đã cố gắng cập nhật các cột với:
-----just update the name to the id)----
UPDATE tbl1
SET [myXml].modify('replace value of (/Bands/Band/Name/text())[1]
with sql:column("id")')
Tất cả tốt.
Câu hỏi # 1
Làm thế nào tôi có thể sử dụng truy vấn này để udpate giá trị để id+"lalala"
:
UPDATE tbl1
SET [myXml].modify('replace value of (/Bands/Band/Name/text())[1]
with sql:column("id") + "lalala"')
Lỗi = XQuery [tbl1.myXml.modify()]: Những lý luận về '+' phải là một kiểu số nguyên duy nhất
Câu hỏi # 1
Giả sử tôi không muốn cập nhật bản ghi đầu tiên ([1]
), nhưng tôi muốn udpate
(cùng một cập nhật như trên) chỉ ở những nơi score>4
.
tôi có thể viết ofcourse trong xpath:
replace value of (/Bands/Band[Score>4]/Name/text())[1]
Nhưng tôi không muốn làm điều đó trong XPath. Không phải là một cách bình thường để làm điều này với một mệnh đề Where
?
cái gì đó như:
UPDATE tbl1
SET [myXml].modify('replace value of (/Bands/Band/Name/text())[1]
with sql:column("id") where [...score>4...]')
tại sao họ làm điều này '[1]'? Họ không nghĩ rằng có lẽ tôi muốn cập nhật 'hơn 1 phần tử'? –
@RoyiNamir Tài liệu nói rằng "Expression1 phải là một singleton thống kê." là [ở đây] (http://msdn.microsoft.com/en-us/library/ms190675.aspx). Nó tương tự cho 'chèn' nhưng' xóa' có thể xóa nhiều hơn một nút. Tôi thực sự không biết tại sao họ chọn làm như vậy nhưng nếu nó được cho phép bạn có thể kết thúc trong một số tình huống kỳ lạ nơi các nút đã sửa đổi thay đổi vị từ tìm thấy các nút cần sửa đổi ngay từ đầu. Nếu bạn cần cập nhật nhiều hơn một nút, bạn phải thực hiện nó trong một vòng lặp while. –
Cảm ơn. Tôi chọn câu trả lời này vì nó ít lâu và dễ đọc hơn. Nhưng cảm ơn rất nhiều cho cả hai câu trả lời! –