2010-02-16 5 views
5

Je dois remplacer la balise {URL}:Chaîne T-SQL Remplacer

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 

Mon résultat attendu est:

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. 

Et le résultat d'impression est:

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

Comme vous pouvez le voir la fonction de remplacement coupe la chaîne d'URL à son 31 ...

Qu'est-ce que je fais mal?

Répondre

10

Le problème n'est pas la méthode replace, il est la méthode convert ..

Vous avez besoin soit spécifier la longueur du type converti

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

ou puisqu'il est déjà défini comme un varchar il suffit d'utiliser la variable ..

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

Si vous avez un oeil à la char/vachrar page

Lorsque n est pas spécifié dans une définition des données ou déclaration de déclaration variable , la longueur par défaut est 1. Lorsque n n'est pas spécifié lors de l'utilisation des fonctions CAST et CONVERT, la longueur par défaut est .

+0

Bon point que la conversion n'est pas même nécessaire, +1. – rosscj2533

1

Il devient coupé à cette ligne:

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

Utilisez ceci:

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

Vous ne spécifiez pas une longueur de varchar:

CONVERT(varchar,@PageUrl) 

deviner ce que la valeur par défaut est? 30, comme vous dites dans la question (le 31 char la fin est manquante)

utiliser comme ceci:

CONVERT(varchar(200),@PageUrl) 

pour obtenir tous les personnages