2009-05-10 8 views
2

Ich benutze SQL Server 2005. Ich habe zwei Tabellen, und sie verwenden unterschiedliche Sortierungen. Es ist nicht mit verschiedenen Sortierungen verketten Spalten von Tabellen erlaubt, zum Beispiel der folgende SQL ist nicht erlaubt,Join Spalte mit anderen Kollation Problem

select table1column1 + table2column2 from ... 

Meine Frage ist, warum Verkettung von zwei Spalten aus verschiedenen Sortierungen nicht aus Datenbank-Engine Design-Perspektive erlaubt? Ich weiß nicht, warum Vergleichsergebnisse auswirken werden, wird das Ergebnis nur Zeichenfolge verketten - sollte genug und nicht abhängig von Sortierungs ...

Vielen Dank im Voraus, George

+0

Voting für Duplikat: http://stackoverflow.com/questions/844896/sql-server-2005-collation-issue - Diese Fragen wurden dort beantwortet. – Tomalak

+2

@Tomalak, es ist eine neue Frage. Diese Frage diskutiert die Ursache aus der Sicht der Datenbank-Engine (warum), die andere Frage, die du zitiert hast, ist die Frage, wie man sie (wie) lösen soll. Um den Overhead verschiedener Perspektiven von Threads zu reduzieren, um den Leser von verschiedenen Perspektiven zu verwirren, entscheide ich mich, einen neuen zu beginnen. Lassen Sie mich wissen, wenn irgendwelche Probleme und ich helfen können, zu korrigieren. :-) – George2

+0

Wahrscheinlich hast du Recht. Ich denke, du solltest die Frage umbenennen, vielleicht so etwas wie "Warum können Spalten mit verschiedenen Kollatierungen nicht verkettet werden?" (da ein JOIN mit Tabellen gemacht wird, nicht mit Spalten) – Tomalak

Antwort

1

OK,

einfach sein Ich denke, die Antwort ist einfach, dass das Entwickeln eines Systems, das mit Unicode arbeitet, viel schwieriger ist als der ASCII-Zeichensatz. Sie müssen sich um mehr als die Buchstaben sorgen; wenn du arabisch und französisch hättest, dann wie du string a + string b machst, wenn sie in verschiedenen Richtungen lesen (nicht kana kompatibel, denke ich, ist der Begriff)?

Sie müssen eine neue Arbeit zu Collation hinzufügen - Coercibility - ich verstehe, dass Coercompliance die Kompatibilität von Strings in verschiedenen Kollatierungen behandeln soll. d. h. es sollte eine Datenbank-Engine zulassen, indem Regeln verwendet werden, so dass Latin1_CI_AS unter bestimmten Umständen wirklich mit Latin1_CI_AI kompatibel sein sollte.

Wenn Sie eine Kopie von SQL 99 Spec haben; Lesen Sie die Coercompliance von Kollatierungen nach, die definieren, wie Strings zwischen Kollatierungen manipuliert werden können. MS haben versucht, es hier auf MSDN zu definieren, obwohl ich nicht sicher bin, dass sie im Vergleich zu den Standards weit genug gegangen sind; vielleicht wird sql2010 besser ... Soweit meine Lektüre zu diesem Thema ist gegangen; es gilt immer noch für den SQL03-Standard - ich denke für die Vorwärts-Berechenbarkeit. Die google books entry für SQL 99 hat die Seiten nicht auf Gleichheit und ich finde nichts besseres als die MSDN Erklärung.

3

Sagen wir Table1Column1 hat SQL_Latin1_General_CP1_CI_AS und Table2Column2 hat Latin1_General_CI_AS. Dann können Sie dies tun:

SELECT Table1Column1 + Table2Column2 COLLATE SQL_Latin1_General_CP1_CI_AS 

hoffen, dass dies Ihr Problem lösen :)