2010-02-16 8 views
5

tengo que sustituir la etiqueta {URL}:T-SQL cadena de reemplazo

DECLARE @PageUrl varchar(200) 
DECLARE @Body varchar(MAX) 

SET @PageUrl = 'http://www.website.com/site1/site2/pageName.asxp?rid=1232' 
SET @Body = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus, 
{URL} enim nec posuere volutpat, neque dui volutpat turpis. ' 

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar,@PageUrl)) 
PRINT @Body 

Mi resultado esperado es:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus, 
http://www.website.com/site1/site2/pageName.asxp?rid=1232 enim nec posuere volutpat, neque dui volutpat turpis. 

Y el resultado de la impresión es:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus, 
http://www.website.com/site1/s enim nec posuere volutpat, neque dui volutpat turpis. 

Como puede ver, la función de reemplazo corta la cadena url en 31 ...

¿Qué estoy haciendo mal?

Respuesta

10

El problema no es el método replace, es el método convert ..

Usted necesita para especificar la longitud del tipo convertido

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar(200),@PageUrl)) 

o puesto que ya se define como un varchar sólo tiene que utilizar la variable ..

SET @Body = REPLACE(@Body,'{Url}', @PageUrl) 

Si usted tiene un vistazo a la char/vachrar page

Cuando n no se especifica en una definición de datos o declaración de variable declaración , la longitud predeterminada es 1. Cuando n no se especifica al usar las funciones CAST y CONVERT , la longitud predeterminada es .

+0

Buen punto que el converso no es incluso necesario, +1. – rosscj2533

1

Es cada vez cortado en esta línea:

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar,@PageUrl)) 

Utilice esta:

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar(200),@PageUrl)) 
2

No se especifica una longitud varchar:

CONVERT(varchar,@PageUrl) 

adivinar lo que el defecto es? 30, al igual que se dice en la pregunta (char 31 hasta el final no se encuentra)

utilizar de esta manera:

CONVERT(varchar(200),@PageUrl) 

para obtener todos los caracteres