2010-04-14 19 views
34

Tengo una base de datos en SQL Server 2005 que apareció en SQL Server 2000 y todavía usa campos de tipo TEXT en lugar de varchar (max).Encontrar y reemplazar el SQL Server en el campo TEXTO

Necesito encontrar y reemplazar una cadena de caracteres en el campo de texto pero todos los ejemplos de cómo hacer esto que he encontrado no parecen funcionar para mí. Parece que el comando UPDATETEXT requiere que los dos parámetros "insert_offset" y "delete_length" se establezcan explícitamente, pero la cadena que estoy buscando podría aparecer en el texto en cualquier punto o incluso en varios puntos de la misma celda. Mi comprensión de estos dos parámetros es que la cadena de búsqueda IM siempre estará en el mismo lugar, de modo que insert_offset es la cantidad de espacios en el texto que el comando UPDATETEXT comenzará a reemplazar el texto.

Ejemplo: necesidad de encontrar: &lt;u&gt; y sustituirlo por: <u>

texto de ejemplo de campos:

¿Puede alguien ayudarme con esto? ¡GRACIAS!

Respuesta

60

Finalmente lo descubrí. Fue enterrado en los comentarios al artículo jfrobishow publicado. Muchas gracias.

Aquí es toda la respuesta que me llevó a la solución:

Cita: Iniciado por fredclown

Si utiliza SQL 2005 puede utilizar reemplazar con un tipo de texto. Todo lo que tiene que hacer es el siguiente ...

campo = sustituir (molde (campo como varchar (max)), 'cadena', 'reemplazo')

fácil como pastel.

Dos pulgares hasta Fredclown !!! el comando funciona como un amuleto para mí también. Este es lo que escribí mi declaración de actualización a Buscar y reemplazar en un campo de texto en servidor de base de datos SQL 2005

UPDATE TableName SET DBTextField = REPLACE(CAST(DBTextField AS varchar(MAX)) 
               ,'SearchText', 'ReplaceText') 
FROM TableName 
WHERE CHARINDEX('SearchText',CAST(DBTextField as varchar(MAX)))>0 

Nota: que esto puede truncar el tamaño de ustedes dbfield, pero si es una columna de texto largo, conviértalo en nvarchar (max) y no debería obtener ningún truncamiento.

+8

advertencia: esto recortará el contenido del campo de texto a 8000 caracteres –

+0

@incubushead gracias. Sé que es una publicación anterior, pero esta sintaxis específica que me ofreció directamente me ayudó a vivir en el sitio de un cliente con algo que iba a ser largo y difícil de trabajar de otra manera, así que gracias. Alguien atascado con un campo ntext - Yo estaba, No lancé a ntext (no funciona Y está en desuso), simplemente use varchar (max) como se indica aquí; funciona solo El reparto no altera el tipo de columna, sino cómo se comporta la actualización, también use no se pierda MAX si el texto es un poco más largo que unos pocos caracteres truncado a 50 caracteres. –

+0

¿Qué sucede si desea ELIMINAR cadenas y no reemplazarlas por nada? – Fandango68

Cuestiones relacionadas