?id=29637614-5653-49ba-a95c-e8a8b71c77ae
TRUCO: Cómo usar REPLACE en un campo NTEXT de SQL Server
por José M. Alarcón
Un 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 Aguí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.