Альтернативы REPLACE в текстовом или ntext-типе данных

Мне нужно обновить/заменить данные в 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, уровень 16, состояние 1, строка 1 Тип аргумента ntext недопустим для аргумента 1 функции replace.

  • Можно ли исправить это с помощью T-SQL? Есть ли у кого-нибудь пример, как читать и цитировать?
  • Так как это одноразовое преобразование, возможно, я могу перейти на другой тип, но я боюсь, что я испортил данные.

Существует поле первичного ключа: name: ID - integer - это идентификатор... Поэтому мне тоже нужно подумать об этом. Может быть, установите идентификатор в N временным.

Пожалуйста, сообщите, как выполнить функцию REPLACE?

Прибл. 3000 необходимо обновить с помощью нового решения.

Ответ 1

IF ваши данные не переполнят 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%' 

Ответ 2

Предполагая, что SQL Server 2000, следующий fooobar.com/questions/29127/... должен решить вашу проблему.

Если вы используете SQL Server 2005/2008, вы можете использовать следующий код (взятый из здесь):

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