Tôi về cơ bản có một cột xml, và tôi cần phải tìm và thay thế một giá trị thẻ trong mỗi bản ghi.Tôi có thể tìm/thay thế bằng t-sql không?
Trả lời
Đố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))
Để 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.
update my_table
set xml_column = replace(xml_column, "old value", "new value")
"Đối số kiểu dữ liệu xml không hợp lệ cho tham số 1 của thay fuction" –
- 1. TSQL - Có thể xác định thứ tự sắp xếp không?
- 2. Hiệu suất TSQL với @@ Lỗi và chúng có thể được thay thế không?
- 3. Tôi có thể có nhiều hình nền bằng CSS không?
- 4. Tôi có thể học regex bằng ruby như thế nào?
- 5. Tôi có thể viết GEOTIFF bằng Java như thế nào?
- 6. Chúng tôi có thể giải mã URL bằng Notepad ++ không?
- 7. Tôi có thể mở rộng lisp bằng C++ không?
- 8. LINQ to SQL có thể tạo TSQL có chứa hàm ISNULL không?
- 9. Tôi có thể sử dụng nhiều "bằng" không?
- 10. Tôi có thể mở rộng Corona bằng mã gốc không?
- 11. Tôi có thể truy cập API ImageMagick bằng Python không?
- 12. Tôi có thể tạo Tuples từ IEnumerables bằng LINQ không?
- 13. Tôi có thể xóa bộ đệm sớm bằng ASP.NET không?
- 14. Tôi có thể sử dụng php bằng điện thoại không?
- 15. Tôi có thể đặt umask cho tempfile.NamedTemporaryFile bằng python không?
- 16. Tôi có thể bật SSL trong Sinatra bằng Thin không?
- 17. Tôi có thể gửi fax bằng PHP không?
- 18. Tôi có thể tự động đặt tabindex bằng JavaScript không?
- 19. Tôi có thể đếm các phần tử bằng jQuery không?
- 20. Tôi có thể tạo thẻ tập lệnh bằng jQuery không?
- 21. Tôi có thể dùng thử phpMyAdmin bằng webmatrix không?
- 22. Tôi có thể tạo cột nvarchar (MAX) bằng FluentMigrator không?
- 23. Không thể kết nối với cơ sở dữ liệu SQL Server bằng pymssql nhưng có thể kết nối bằng cách sử dụng freetds tsql cơ bản
- 24. tsql: có thể thực hiện các câu lệnh lồng nhau trong một lựa chọn không?
- 25. TSQL Vòng() không thống nhất?
- 26. Tôi có thể * thay thế * UILabel trên UIButton bằng FXLabel không?
- 27. Làm thế nào tôi có thể diễn tả rằng hai giá trị không bằng nhau?
- 28. SQL hoặc thậm chí TSQL Turing có hoàn thành không?
- 29. TSQL: theo thứ tự asc không có tên cột
- 30. Thay thế một dòng mới trong TSQL
hah, đó là một ít hack rực rỡ :-) –
@ 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? –
@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. –