2008-10-05 23 views

Trả lời

34

Đối với bất cứ điều gì thực, tôi muốn đi với XPath, nhưng đôi khi bạn chỉ cần một giải pháp nhanh chóng và dơ bẩn:

Bạn có thể sử dụng để biến CAST rằng cột xml vào một varchar thường xuyên, và sau đó làm bình thường của bạn thay thế.

UPDATE xmlTable SET xmlCol = REPLACE(CAST(xmlCol as varchar(max)), '[search]', '[replace]')

Cùng kỹ thuật cũng làm cho việc tìm kiếm XML một snap khi bạn cần phải chỉ cần chạy một truy vấn nhanh chóng để tìm một cái gì đó, và không muốn để đối phó với XPath.

SELECT * FROM xmlTable WHERE CAST(xmlCol as varchar(max)) LIKE '%found it!%'

Chỉnh sửa: Chỉ muốn cập nhật này một chút, nếu bạn nhận được một thông dọc theo dòng của chuyển đổi một hoặc nhiều ký tự từ XML để nhắm mục tiêu đối chiếu không thể, sau đó bạn chỉ cần sử dụng nvarchar hỗ trợ unicode.

CAST(xmlCol as nvarchar(max))

+0

hah, đó là một ít hack rực rỡ :-) –

+0

@ Cory-Mawhorter Bạn nói XPath sẽ là "tốt hơn". Bạn sẽ sử dụng XPath như thế nào để thay đổi một cái gì đó trong cột XML? –

+0

@ArminderDahul Đã lâu rồi nhưng tôi nghĩ bạn có thể làm như 'set xmlCol.nodes ('/ somenode/someothernode [@ id = sql: variable (" @ somevar ")]/text') = 'blah'' . Không chắc. Câu trả lời của Michael có thể giúp bạn bắt đầu. –

15

Để tìm nội dung trong cột XML, hãy xem phương thức tồn tại(), như được mô tả trong MSDN here.

SELECT * FROM Table 
WHERE XMLColumn.exist('/Root/MyElement') = 1 

... để thay thế, sử dụng phương thức modify(), như được mô tả here.

SET XMLColumn.modify(' 
    replace value of (/Root/MyElement/text())[1] 
    with "new value" 
') 

..tất cả giả định SqlServer 2005 hoặc 2008. Điều này dựa trên XPath mà bạn cần biết.

-5
update my_table 
set xml_column = replace(xml_column, "old value", "new value") 
+4

"Đối số kiểu dữ liệu xml không hợp lệ cho tham số 1 của thay fuction" –

Các vấn đề liên quan