альтернативы REPLACE для типа данных text или ntext - PullRequest
88 голосов
/ 03 декабря 2010

Мне нужно обновить / заменить данные в 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%' 

Получаю эту ошибку:

Сообщение 8116, уровень 16, состояние 1, строка 1 Тип данных аргумента ntext недопустим для аргумента 1 функции замены.

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

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

Посоветуйте, пожалуйста, как получить функцию ЗАМЕНА?

Прибл. Необходимо обновить 3000 операторов новым решением.

Ответы [ 2 ]

181 голосов
/ 03 декабря 2010

ЕСЛИ ваши данные не будут переполнены 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%' 
12 голосов
/ 03 декабря 2010

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

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

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext)
from myntexttable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...