在text或ntext数据类型上替换REPLACE的替代方法


101

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

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

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

我收到此错误:

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

  • 我可以使用T-SQL修复此问题吗?有人有示例如何阅读和循环吗?
  • 由于这是一次转换,因此也许我可以更改为另一种类型,但恐怕会弄乱数据。

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

请告知如何实现REPLACE功能?

大约 需要使用新的解决方案更新3000条语句。


这是SQL Server 2000吗?
p.campbell 2010年

解答:我正在使用SQL2008 ...,数据库的兼容性级别为2000(80)。如果我也更改此设置,它将在2008年起作用吗?因为我不知道后果如何,所以我将兼容性级别保留为2000,但这是SQL 2008数据库。这是一次转换...
ethem 2010年

Answers:


197

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

3
只是一个简单的问题,第二个强制转换是否NText真的必要?我认为分配NVarchar(MAX)NText会自动转换它。
塔希尔·哈桑

3
伟大的简单修复。请注意,2005+ nvarchar(max)的上限为4000个字符。我知道这很明显(现在,对我来说),但是我首先读它,好像两个答案都有这个限制。
goodeye

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.