alternativas para REEMPLAZAR en un tipo de datos text o ntext


Necesito actualizar/reemplazar los datos en datatable.columna. La tabla tiene un campo llamado Content. Estoy usando la función REPLACE. Dado que el tipo de datos de la columna es NTEXT, SQL Server no me permite usar la función REPLACE.

No puedo cambiar el tipo de datos porque esta base de datos es una tabla de software de terceros. Cambiar el tipo de datos hará que la aplicación falle.

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

Recibo este error:

Msg 8116, Nivel 16, Estado 1, Línea 1 Argumento tipo de datos ntext es no válido para el argumento 1 de la función replace.

  • ¿Puedo arreglar esto con T-SQL? ¿Alguien tiene un ejemplo de cómo leer y hacer loop?
  • Dado que esta es una conversión única, tal vez pueda cambiar a otro tipo, pero me temo que estoy arruinando los datos.

Hay un campo de clave primaria: name: ID - integer - es una identidad.... Así que necesito pensar en esto también. Tal vez establecer la identidad a N temporal.

Por favor, aconseje sobre cómo lograr el REEMPLAZO ¿función?

Aprox. 3000 declaraciones deben actualizarse con una nueva solución.

Author: p.campbell, 2010-12-03

2 answers

SI sus datos no desbordan 4000 caracteres Y está en SQL Server 2000 o nivel de compatibilidad de 8 o 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%' 

Para 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%' 
 171
Author: p.campbell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-03 01:23:30

Asumiendo SQL Server 2000, la siguiente pregunta StackOverflow debería abordar su problema.

Si usa SQL Server 2005/2008, puede usar el siguiente código (tomado de aquí):

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext)
from myntexttable
 12
Author: LittleBobbyTables,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:10