2009-02-18 5 views
1

Le code suivant:SQL Server 2005 LENfunction bizarrerie

if (right(@eqlist,2) = ', ') 
    set @eqlist = left(@eqlist,len(@eqlist)-2) 

produit des résultats différents (avec les mêmes données) sur mon serveur de production que sur mon serveur de développement. Le problème est que la fonction LEN est supposée couper les espaces de fin avant de calculer la longueur d'une chaîne, mais cela ne semble pas le faire sur mon serveur de développement.

Sur mon serveur de développement, cela fonctionne très bien et supprime le '' 'd'une chaîne, mais sur le serveur de production, il supprime un caractère supplémentaire. Évidemment, changer le "-2" en "-1" résout le problème pour le serveur de production, mais le casse pour le serveur de développement.

J'ai réécrit le code pour qu'il fonctionne de manière cohérente sur les deux serveurs, mais j'aimerais quand même savoir pourquoi la fonction LEN se comporte différemment sur chaque serveur.

Le code réécrite:

if (right(@eqlist,2) = ', ') 
    set @eqlist = left(rtrim(@eqlist),len(rtrim(@eqlist))-1) 
+0

Ma conjecture: vos deux serveurs ont un paramètre de jeu de caractères/classement différent. –

+0

Qu'est-ce que @eqlist? varchar? –

Répondre

0

Vérifiez les jeux de caractères et les paramètres de classement sur vos deux serveurs, bases de données et tables. Des différences peuvent résulter en une coupe et l'autre non.

1

Avez-vous vérifié la valeur de ANSI_PADDING lorsque vos tables ont été créées? Je ne peux pas vous donner de détails précis sur votre problème, mais si vous allez à l'encontre d'une table avec des colonnes VARCHAR, cela pourrait l'amener à agir différemment.