2010-02-16 10 views
5

ho bisogno di sostituire il tag {URL}:T-SQL Stringa di sostituire

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 

mio risultato atteso è:

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. 

E il risultato di stampa è:

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

Come potete vedere la funzione di sostituzione taglia la stringa url al suo 31 ...

Cosa sto facendo male?

risposta

10

Il problema non è il metodo replace, è il metodo convert ..

È necessario specificare la lunghezza del tipo convertito

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

o dal momento che è già definito come un varchar basta usare la variabile ..

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

Se si dispone di uno sguardo al char/vachrar page

Quando n non è specificato in un data definizione o dichiarazione variabile , la lunghezza predefinita è 1. Quando n non è specificato quando si usano le funzioni CAST e CONVERT, la lunghezza predefinita di è .

+0

Buon punto che il convertito non è anche necessario, +1. – rosscj2533

1

Sta diventando tagliato fuori in questa linea:

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

Utilizzare questa:

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

Non si specifica una lunghezza varchar:

CONVERT(varchar,@PageUrl) 

indovinate un po 'il valore predefinito è? 30, proprio come si dice in questione (il char 31 fino alla fine manca)

usare in questo modo:

CONVERT(varchar(200),@PageUrl) 

per ottenere tutti i personaggi