在文本或ntext数据types上替代REPLACE

我需要更新/replacedatatable.column中的数据。 该表有一个名为Content的字段。 我正在使用REPLACEfunction。 由于列数据types是NTEXT ,SQL Server不允许使用REPLACE函数。

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

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

我收到此错误:

消息8116,级别16,状态1,行1参数数据typesntext对replace函数的参数1无效。

  • 我可以用T-SQL解决这个问题吗? 有人有一个例子如何阅读和循环?
  • 由于这是一次转换,也许我可以改变到另一种types,但我恐怕我搞乱了数据。

有一个主键字段:名称:ID – 整数 – 这是一个身份….所以我也需要考虑这一点。 也许将身份设置为N临时。

请告知如何实现REPLACEfunction?

约。 3000条语句需要更新一个新的解决scheme。

如果您的数据不会溢出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%' 

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

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

如果使用SQL Server 2005/2008,可以使用下面的代码(从这里取得 ):

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

关于这个问题的一个好文章:

http://www.sidesofmarch.com/index.php/archive/2008/02/27/how-to-use-replace-within-ntext-columns-in-sql-server/

你应该施放ntextvariables。

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