2010-02-18 6 views
54

Ich weiß, ich weiß mit dem, was ich in der Frage geschrieben habe ich sollte nicht überrascht sein. Aber meine Situation arbeitet langsam an einem geerbten POS-System und mein Vorgänger war anscheinend nicht bewusst, JOINs, also wenn ich in eine der internen Seiten sah, die für 60 Sekunden lädt, sehe ich, dass es ein ziemlich schnell ist, schreiben diese 8 Abfragen als eins Abfrage mit JOINs Situation. Das Problem ist, dass er nicht nur über JOINs Bescheid weiß, sondern auch einen Fetisch für mehrere Datenbanken gehabt hat und überrascht, dass sie verschiedene Kollatierungen verwenden. Tatsache ist, dass wir alle "normalen" lateinischen Zeichen verwenden, dass englisch sprechende Leute das gesamte Alphabet betrachten würden und dieses ganze Ding wird in ein paar Monaten nicht mehr verwendet werden, also ist ein Bandaid alles was ich brauche.Doing über zwei Datenbanken mit verschiedenen Sortierungen auf SQL Server und erhalten einen Fehler

Lange Rede kurzer Sinn ist ich brauche eine Art von Methode, um zu einer einzigen Kollatierung zu werfen, damit ich zwei Felder aus zwei Datenbanken vergleichen kann.

Genaue Fehler ist:

Kann Sortierungskonflikt zwischen "SQL_Latin1_General_CP850_CI_AI" nicht lösen und "SQL_Latin1_General_CP1_CI_AS" im gleich Betrieb.

Antwort

107

können Sie die COLLATE-Klausel in einer Abfrage verwenden (ich kann nicht mein Beispiel gerade jetzt finden, so dass meine Syntax wahrscheinlich falsch ist - ich hoffe, es Punkte, die Sie in der richtigen Richtung)

select sone_field collate SQL_Latin1_General_CP850_CI_AI 
    from table_1 
    inner join table_2 
     on (table_1.field collate SQL_Latin1_General_CP850_CI_AI = table_2.field) 
    where whatever 
48

Eine allgemeine Möglichkeit besteht darin, die Kollatierung auf DATABASE_DEFAULT zu zwingen. Dies entfernt die Hardcodierung des Kollatierungsnamens, der sich ändern könnte.

Es ist auch für temporäre Tabelle und Tabellenvariablen nützlich, und wo Sie den Server nicht Sortierungs kennen (zB Sie sind ein Anbieter Ihr System auf dem Server des Kunden platzieren)

select 
    sone_field collate DATABASE_DEFAULT 
from 
    table_1 
    inner join 
    table_2 on table_1.field collate DATABASE_DEFAULT = table_2.field 
where whatever