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

eth*_*hem 93 sql t-sql sql-server

我需要更新/替换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%' 
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

消息8116,级别16,状态1,行1参数数据类型ntext对替换函数的参数1无效.

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

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

请告知如何实现REPLACE功能?

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

p.c*_*ell 189

如果您的数据不会溢出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%' 
Run Code Online (Sandbox Code Playgroud)

对于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%' 
Run Code Online (Sandbox Code Playgroud)

  • 只是一个简单的问题,第二次演绎"NText"真的有必要吗?我认为将`NVarchar(MAX)`分配给`NText`会自动转换它. (3认同)
  • 伟大的简单修复。请注意,2005+ nvarchar(max) 没有 4000 个字符的限制。我知道这很明显(现在,对我来说),但我第一次阅读时好像两个答案都有这个限制。 (3认同)

Lit*_*les 15

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

如果使用SQL Server 2005/2008,则可以使用以下代码(从此处获取):

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext)
from myntexttable
Run Code Online (Sandbox Code Playgroud)