JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

TRUCO: Cómo usar REPLACE en un campo NTEXT de SQL Server

USQL-Servern truco rápido para hoy...

Hasta SQL Server 2005 la única manera de guardar en una base de datos campos de texto muy largos, de longitud arbitraria, era utilizando un campo de tipo NTEXT.

Estos campos eran útiles para estas cuestiones, pero tenían bastantes limitaciones ya que no permiten el uso de ciertas funciones (como LEN o REPLACE) y además en lugar de guardarse en línea como otros datos, se guardaban en LOBs (Large Objects) aparte, por lo que el rendimiento es mucho peor. Además, es un tipo de dato obsoleto que ya no deberías utilizar pues aunque sigue estando soportado por SQL Server 2012, en versiones posteriores podría eliminarse y ya no podrías utilizarlos.

El caso es que hoy he tenido que actualizar una base de datos bastante vieja que tenía campos de tipo NTEXT, para lo cual necesitaba usar la función REPLACE y sustituir unos textos por otros dentro de estos campos. Si intentas usar REPLACE con un campo NTEXT SQL Server te devuelve un error.

Para poder hacerlo igualmente un truco es utilizar una doble conversión de NTEXT a NVARCHAR(max) y vuelta otra vez a NTEXT:

   1: UPDATE MiTabla
   2: SET MiCampoNText =  CAST(REPLACE(CAST(MiCampoNText as nvarchar(max)), 
   3:                     'texto buscado', 'texto nuevo') as NTEXT)

De esta forma no tendrás problema.

Es bastante poco óptimo pero para hacerlo un única vez, aunque los datos sean muchos, es más que suficiente.

¡Espero que te sea útil!"

José Manuel Alarcón José Manuel Alarcón
Fundador de campusMVP.es, el proyecto de referencia en formación on-line para programadores en lengua española. Autor de varios libros y cientos de artículos. Galardonado como MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.
Descarga GRATIS mi último libro (no técnico): "Tres Monos, Diez Minutos".
Banner

Comentarios (3) -

De esta forma tambien funciona y es algo mas corta.

   1: UPDATE MiTabla

   2: SET MiCampoNText =  REPLACE(CAST(MiCampoNText as nvarchar(max)),

   3:                     'texto buscado', 'texto nuevo')

Responder

Spain José Manuel Alarcón

Gracias por la aportación.

Saludos!

Responder

Buenísimo muchachos!!!!!!!!!!!!!!!!!! de primera

Responder

Agregar comentario