替换为text或ntext数据类型的REPLACE

时间:2010-12-03 01:10:13

标签: sql sql-server tsql

我需要更新/替换datatable.column中的数据。该表有一个名为Content的字段。我正在使用REPLACE功能。由于列数据类型为NTEXT,因此SQL Server不允许我使用REPLACE函数。

我无法更改数据类型,因为此数据库是第三方软件表。更改数据类型将导致应用程序失败。

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

我收到此错误:

  

Msg 8116,Level 16,State 1,Line 1   对于替换函数的参数1,参数数据类型ntext无效。

  • 我可以使用T-SQL修复此问题吗?有人有一个如何阅读和循环的例子吗?
  • 由于这是一次转换,也许我可以换成另一种类型,但我担心我搞乱数据。

有一个主键字段:name:ID - integer - 它是一个标识....所以我也需要考虑这个问题。也许将身份设置为N临时。

请告知如何实现REPLACE功能?

约需要使用新解决方案更新3000个语句。

2 个答案:

答案 0 :(得分:181)

IF 您的数据不会溢出4000个字符 AND 您使用的是SQL Server 2000或兼容级别为8或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%' 

对于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%' 

答案 1 :(得分:12)

假设SQL Server 2000,以下StackOverflow question应解决您的问题。

如果使用SQL Server 2005/2008,您可以使用以下代码(取自here):

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