Bảng được đặt tên như MasterTable
Sql XQuery Làm thế nào để Thay thế văn bản trong Update Query
Cột
ID
loại BIGINT
,
Name
loại VARCHAR(200)
(cửa hàng xml
kiểu dữ liệu đối với một số lý do)
Name
chứa dữ liệu có cấu trúc như
<en-US>SomeEnglishText</en-US><it-IT>SomeItalicText</it-IT>
Khi tôi cần phải Update
các Master
Bảng sau đó tại thời điểm đó tôi cần phải cast Varchar
-xml
sau đó có điều kiện cập nhật/thay thế các value
phần của thẻ đặc biệt tức là một trong hai en-US/it-IT
.
Cũng có những cơ hội mà Không có dữ liệu/thẻ đang có trong Name
cột vì vậy tôi nghĩ rằng tại thời điểm Chèn dữ liệu mà nó sẽ Insert
yếu tố thẻ trống trong bảng như <en-US></en-US><it-IT></it-IT>
, vì vậy update
truy vấn phải xử lý giá trị rỗng trong các yếu tố thẻ cụ thể là en-US/it-IT
.
Tôi đang cố gắng thực hiện như truy vấn cập nhật sau.
DECLARE @Str VARCHAR(200)
SET @Str = 'Test Text'
UPDATE [MasterTable]
SET [Name] = cast([MasterTable].[Name] as xml).modify('replace value of (en-US/text())[1] with sql:variable("@Str")')
WHERE [ID]=18
tôi nhận được lỗi sau khi chạy truy vấn
sử dụng bất hợp pháp của phương pháp kiểu dữ liệu xml 'sửa đổi'. Một phương pháp không biến đổi được mong đợi trong ngữ cảnh này.
tôi đã thay đổi này 'tuyên bố varchar @str (200) = 'Test'' cho' tuyên bố @str varchar (200) bộ @str =' Test'' và nó làm việc .. Thanks a lot –
Bạn có thể nói rằng làm thế nào nếu mã trước đó là 'COALESCE (@Name, Name)' và bây giờ tôi muốn thay đổi nó thành 'UPDATE MasterTable set Name = Name.modify ('thay thế giá trị của (en-US/text)()) [1] với sql: biến ("@ Str") ') trong đó ID = 18' như khôn ngoan tức là xử lý NULL trong @Str –
Cũng như cột 'Tên' là' VARCHAR (200) ' vì vậy tôi đang đối mặt với vấn đề trực tiếp gọi 'sửa đổi 'trên nó –