2010-02-16 22 views
5

muszę wymienić tag {URL}:T-SQL String Wymień

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 

Moje oczekiwany wynik to:

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. 

i wynik wydruku jest:

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

Jak widzisz, funkcja zamiany odcina łańcuch adresu URL na 31 ...

Co robię źle?

Odpowiedz

10

Problemem nie jest to metoda replace, jest to metoda convert ..

czego potrzebujesz aby określić długość przekonwertowanego typu:

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

lub ponieważ jest już zdefiniowany jako varchar wystarczy użyć zmiennej ..

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

Jeśli spojrzeć na char/vachrar page

Gdy n nie jest określona w definicji danych lub deklaracja zmiennej oświadczenie, domyślna długość to 1. Gdy n nie jest określone podczas korzystania z funkcji CAST i CONVERT , domyślna długość to .

+0

Dobry punkt, że konwersja nie jest nawet konieczne, +1. – rosscj2533

1

Robi się odciąć w tym wierszu:

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

użyj:

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

Nie określić długość varchar:

CONVERT(varchar,@PageUrl) 

odgadnąć co domyślnie jest? 30, tak jak mówisz, w pytaniu (31-char do końca brakuje)

używać go tak:

CONVERT(varchar(200),@PageUrl) 

aby wszystkie znaki