2010-02-16 16 views
5

Ich brauche den Tag {URL} ersetzen:T-SQL-String ersetzen

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 

Mein erwartetes Ergebnis ist:

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. 

Und das Druckergebnis ist:

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

Wie Sie sehen können, schneidet die Ersetzungsfunktion die URL-Zeichenkette an ihrem 31 ...

Was mache ich falsch?

Antwort

10

Das Problem ist nicht die replace Methode, es ist die convert Methode ist ..

Sie benötigen um entweder die Länge des konvertierten Typs anzugeben

oder da sie bereits als varchar definiert nur die Variable verwenden ..

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

Wenn Sie einen Blick auf die char/vachrar page

Wenn n nicht in einem Daten Definition angegeben wird oder 0.Anweisung, die Standardlänge ist 1. Wenn n bei Verwendung der CAST- und CONVERT-Funktionen nicht angegeben ist, ist die Standardlänge .

+0

Guter Punkt, dass der Konvertit nicht ist sogar notwendig, +1. – rosscj2533

1

Es wird immer an dieser Linie abgeschnitten:

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

verwenden:

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

Sie geben keine varchar Länge:

CONVERT(varchar,@PageUrl) 

erraten, was der Standard ist? 30, so wie du in der Frage sagen

es wie folgt verwenden (das 31. Zeichen bis zum Ende fehlt):

CONVERT(varchar(200),@PageUrl) 

zu erhalten alle Charaktere