Les espaces ne sont pas toujours ignoré.
J'ai connu ce problème aujourd'hui. Ma table avait colonnes NCHAR et a été rejoint de données VARCHAR.
Parce que les données dans la table n'était pas aussi large que dans son domaine, des espaces ont été ajoutés automatiquement par SQL Server.
J'ai eu un ITVF (fonction table en ligne) qui a eu varchar paramètres.
Les paramètres ont été utilisés dans une JOINTURE de la table avec la NCHAR champs.
Les jointures ont échoué parce que les données transmises à la fonction n'ont pas d'espaces, mais les données dans la table de fait. Pourquoi était-ce?
J'ai été faire trébucher sur la PRIORITÉ des types de DONNÉES. (Voir http://technet.microsoft.com/en-us/library/ms190309.aspx)
Lors de la comparaison des chaînes de différents types, la priorité inférieure est converti à la priorité plus élevée de type avant la comparaison. Donc, mon VARCHAR paramètres ont été convertis en NCHARs. Le NCHARs ont été comparés, et apparemment, les espaces ont été importants.
Comment ai-je résoudre ce problème? J'ai changé la définition de la fonction à utiliser NVARCHAR paramètres, qui sont d'une priorité plus élevée que NCHAR. Maintenant, le NCHARs ont été modifiés automatiquement par SQL Server dans NVARCHARs et les espaces ont été ignorés.
Pourquoi n'ai-je pas simplement effectuer une RTRIM? Les tests ont révélé que RTRIM tué la performance, de la prévention de la JOINTURE des optimisations SQL Server, autrement, aurait utilisé.
Pourquoi ne pas changer le type de données de la table? Les tables sont déjà installés sur les sites des clients, et ils ne veulent pas exécuter les scripts de maintenance (temps + argent pour payer les Administrateurs de bases de données) ou de nous donner accès à leurs machinines (compréhensible).