2015-01-16 13 views
13

Tại sao tôi nhận được lỗi này từ truy vấn của mình?Lỗi UPDATE: "Văn bản loại dữ liệu đối số không hợp lệ cho đối số 1 của REPLACE"

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

Query:

UPDATE 
    tableName 
SET 
    fieldName = REPLACE (fieldName, '&lt;', '<') 
WHERE 
    id = 100 
+6

Loại dữ liệu 'extext',' text' và 'image' sẽ bị xóa trong phiên bản tương lai của SQL Server. Tránh sử dụng các kiểu dữ liệu này trong công việc phát triển mới và có kế hoạch sửa đổi các ứng dụng hiện đang sử dụng chúng. Sử dụng 'nvarchar (max)', 'varchar (max)' và 'varbinary (max)' thay thế. [Xem chi tiết tại đây] (http://msdn.microsoft.com/en-us/library/ms187993.aspx). 'TEXT' là một kiểu dữ liệu thực sự tồi tệ - có rất nhiều thứ bạn ** không thể làm với nó (bạn không thể sử dụng tất cả các hàm chuỗi, cho một) - ngừng sử dụng nó - NGAY! –

Trả lời

22

Hãy thử điều này:

UPDATE tableName 
SET fieldName = REPLACE (CONVERT(VARCHAR(MAX), fieldName), '&lt;', '<') 
WHERE id = 100 
+0

Cả hai câu trả lời đều khắc phục được sự cố nhưng chúng không đề cập đến lý do (xem nhận xét của marc). Ngoài ra, bản thân thông báo lỗi cũng cho biết lý do. –

+0

Thật tuyệt vời! Cảm ơn. Nó hoạt động! – MufasaTheGreatAndPowerfull2

1

này sẽ làm việc cho bạn

UPDATE yourTableName 
SET 
fieldName = REPLACE (CONVERT(VARCHAR(MAX), fieldName), '&lt;', '<') 
WHERE id = 100 
0

Nếu bạn muốn làm cho hoạt động tương tự cho chữ lớn hơn 8000 ký tự bạn có thể sử dụng mã dưới đây:

DECLARE @v VARCHAR(10) -- TEXT TO ADD 
DECLARE @Vs VARHCAR(10) -- TEXT TO FIND 
SET @v = 'String text to add' 
SET @Vs = 'String text to find' 


     UPDATE 
       yourTableName 
     SET 
       textField = SUBSTRING(textField,1,DATALENGTH (textField)-LEN(@Vs)) + REPLACE(CAST(SUBSTRING(textField,DATALENGTH(textField)-LEN(@Vs)-1,DATALENGTH (textField)) AS VARCHAR(4)),@Vs,@v) 
      WHERE 
       yourTableName.id = @iRifID -- Update for Table ID 
Các vấn đề liên quan