替换文本或 ntext 数据类型上的 REPLACE

我需要更新/替换 datatable.column 中的数据。该表有一个名为 Content的字段。我正在使用 REPLACE函数。由于列数据类型是 NTEXT,因此 SQLServer 不允许我使用 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 参数数据类型 ntext 对于替换函数的参数1无效。

  • 我可以用 T-SQL 来解决这个问题吗? 有人有一个如何读取和循环的例子吗?
  • 由于这是一次性的转换,也许我可以改变到另一种类型,但我担心我搞砸了数据。

有一个主键字段: name: ID-whole-这是一个标识... 。所以我也需要考虑一下。也许可以将 Identity 设置为 N 个临时值。

请告知如何实现 REPLACE 功能?

大约3000个报表需要用一个新的解决方案进行更新。

159948 次浏览

假设使用 SQLServer2000,下面的 StackOverflow 问题应该可以解决您的问题。

如果使用 SQLServer2005/2008,可以使用以下代码(取自 给你) :

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

如果 您的数据不会溢出4000个字符 还有您处于 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%'

对于 SQLServer2005 + :

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