2010-12-03 28 views
72

Tôi cần cập nhật/thay thế dữ liệu trong datatable.column. Bảng có trường có tên là Content. Tôi đang sử dụng hàm REPLACE. Vì kiểu dữ liệu cột là NTEXT, SQL Server không cho phép tôi sử dụng chức năng REPLACE.lựa chọn thay thế để REPLACE trên văn bản hoặc datatype ntext

Tôi không thể thay đổi kiểu dữ liệu vì cơ sở dữ liệu này là bảng phần mềm của bên thứ 3. Thay đổi kiểu dữ liệu sẽ khiến ứng dụng thất bại.

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = REPLACE(Content,'ABC','DEF') 
WHERE Content LIKE '%ABC%' 

Tôi Nhận lỗi này:

Msg 8116, Level 16, State 1, Line 1 Argument data type ntext is invalid for argument 1 of replace function.

  • Tôi có thể sửa lỗi này với T-SQL? Có ai có ví dụ về cách đọc và lặp không?
  • Vì đây là chuyển đổi vĩnh viễn, có lẽ tôi có thể chuyển sang loại khác nhưng tôi sợ rằng tôi đang làm hỏng dữ liệu.

Có trường khóa chính: tên: ID - số nguyên - đó là danh tính .... Vì vậy, tôi cũng cần suy nghĩ về điều này. Có thể đặt Identity thành N tạm thời.

Vui lòng tư vấn về cách đạt được chức năng REPLACE?

Xấp xỉ. 3000 câu cần phải được cập nhật với một giải pháp mới.

+0

Đây có phải là SQL Server 2000 không? –

+0

TRẢ LỜI: Tôi đang sử dụng SQL2008 ... và DATABASE có mức Tương thích 2000 (80). Nếu tôi thay đổi quá 2008 thì nó sẽ hoạt động? kể từ khi tôi không biết hậu quả tôi đã để lại ở mức độ tương thích 2000, nhưng đó là cơ sở dữ liệu SQL 2008. đây là một lần chuyển đổi ... – ethem

Trả lời

159

NẾU dữ liệu của bạn sẽ không tràn 4000 ký tự bạn đang ở trên SQL Server 2000 hoặc khả năng tương thích mức 8 hoặc SQL Server 2000:

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(4000)),'ABC','DEF') AS NText) 
WHERE Content LIKE '%ABC%' 

Đối với SQL Server 2005 +:

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(MAX)),'ABC','DEF') AS NText) 
WHERE Content LIKE '%ABC%' 
+0

cảm ơn bạn ... nó đã hoạt động ... siêu .. cảm ơn. Tôi yêu trang web này ... – ethem

+0

@user: bạn được chào đón; vui mừng đã giúp! Cảm ơn! –

+0

Có thể sử dụng nó. Cảm ơn – Bora

11

Giả sử SQL Server 2000, sau StackOverflow question nên giải quyết vấn đề của bạn.

Nếu sử dụng SQL Server 2005/2008, bạn có thể sử dụng đoạn mã sau (lấy từ here):

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext) 
from myntexttable 
+0

+1: Tốt nhất Bobby! –

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