domingo, 11 de octubre de 2015

Argument data type text is invalid for argument 1 of replace function.

La función REPLACE en MS SQL permite reemplazar en un texto una cadena de caracteres dada por otra cadena.
Por lo que pretendo usar esta función para personalizar un texto agregando un valor que obtengo de una tabla x. Al ejecutar una consulta como esta:

declare @nombre VARCHAR(15);
SET @nombre = 'Marcos';
SELECT REPLACE(Cliente, 'Cliente', @nombre) as Msg FROM Mensajes WHERE id=23;

Obtengo el siguiente error:
Argument data type text is invalid for argument 1 of replace function.

Esto funciona
declare @nombre VARCHAR(15);
SET @nombre = 'Marcos';
SELECT REPLACE('Cliente', 'Cliente', @nombre) as Msg

Donde esta el error?
El error esta en que la columna Cliente que paso como parámetro a la función REPLACE es de tipo TEXT en la base de datos, por lo que se debe pasar a VARCHAR.

SELECT REPLACE(CAST(Cliente AS VARCHAR(500), 'Cliente', @nombre) as Msg FROM Mensajes WHERE id=23;

La duda que surge ahora es: Como obtengo el numero de caracteres de un campo TEXT? les adelanto que la función LEN no va a funcionar.
Argument data type text is invalid for argument 1 of len function.

Mas Información:
https://msdn.microsoft.com/es-es/library/ms186862(v=sql.120).aspx