2009-05-10 9 views
2

J'utilise SQL Server 2005. J'ai deux tables et elles utilisent des classements différents. Il est interdit de concaténer des colonnes de tables avec des classements différents, par exemple l'instruction SQL suivante n'est pas autorisé,Colonne de jointure avec un problème de classement différent

select table1column1 + table2column2 from ... 

Ma question est, pourquoi concaténation de deux colonnes de différents classements ne sont pas permis du point de vue de la conception du moteur de base de données? Je ne sais pas pourquoi la collation aura un impact sur les résultats, le résultat est juste Concaténation - doit être assez simple et ne dépend pas de la collation ...

merci à l'avance, George

+0

vote pour double de: http://stackoverflow.com/questions/844896/sql-server-2005-collation-issue - Ces questions ont été répondues là. – Tomalak

+2

@Tomalak, c'est une nouvelle question. Cette question traite de la cause première du point de vue du moteur de base de données (à propos de pourquoi), l'autre question que vous avez posée est de savoir comment la résoudre (sur comment). Pour réduire les frais généraux de différentes perspectives de discussions pour confondre le lecteur de perspective différente, je décide d'en commencer un nouveau. Faites-moi savoir si des problèmes et je peux aider à corriger. :-) – George2

+0

Probablement vous avez raison. Je suppose que vous devriez renommer la question, peut-être quelque chose comme "Pourquoi les colonnes avec des classements différents ne peuvent-elles pas être concaténées?" (Puisqu'un JOIN est quelque chose que vous faites avec des tables, pas avec des colonnes) – Tomalak

Répondre

1

OK,

Je pense que la réponse est simplement que la conception d'un système pour travailler avec unicode est beaucoup plus difficile que le jeu de caractères ASCII. Vous devez vous soucier de plus que les lettres; si vous aviez l'arabe et le français alors comment faire une chaîne + chaîne b comme ils lisent dans des directions différentes (pas compatible kana je pense que le terme)?

Vous devez ajouter un nouveau travail à la collation - la coercibilité - ma compréhension est que la coercibilité est supposée gérer la compatibilité des chaînes dans différents classements. c'est-à-dire qu'il devrait permettre à un moteur de base de données d'avoir des règles telles que Latin1_CI_AS devrait vraiment être compatible avec Latin1_CI_AI dans certaines circonstances.

Si vous avez une copie de SQL 99 Spec; lire sur la coercibilité des collations qui définit comment les chaînes peuvent être manipulées entre les collations. MS ont essayé de le définir ici sur MSDN mais je ne suis pas sûr qu'ils soient allés assez loin par rapport aux normes; peut-être que sql2010 vaudra mieux ... Autant que j'ai lu sur le sujet; il tient encore sur la norme SQL03 aussi - je devine pour la calculabilité vers l'avant. Le google books entry pour SQL 99 n'a pas les pages sur la coercibilité et je ne peux pas trouver quelque chose de plus que l'explication de MSDN.

3

Disons Table1Column1 a SQL_Latin1_General_CP1_CI_AS et Table2Column2 a Latin1_General_CI_AS. Ensuite, vous pouvez faire ceci:

SELECT Table1Column1 + Table2Column2 COLLATE SQL_Latin1_General_CP1_CI_AS 

Espérons que cela résoudra votre problème :)

Questions connexes