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

Post original en JASoft.org: http://www.jasoft.org/Blog/post/TRUCO-Como-usar-REPLACE-en-un-campo-NTEXT-de-SQL-Server.aspx

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!»

Sin categoría

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *