Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie behebt man einen Kollationskonflikt in einer SQL Server-Abfrage?

Sie können das Problem lösen, indem Sie die in einer Abfrage verwendete Sortierung auf eine bestimmte Sortierung zwingen, z. SQL_Latin1_General_CP1_CI_AS oder DATABASE_DEFAULT . Zum Beispiel:

SELECT MyColumn
FROM FirstTable a
INNER JOIN SecondTable b
ON a.MyID COLLATE SQL_Latin1_General_CP1_CI_AS = 
b.YourID COLLATE SQL_Latin1_General_CP1_CI_AS

In der obigen Abfrage wären a.MyID und b.YourID Spalten mit einem textbasierten Datentyp. Verwenden von COLLATE zwingt die Abfrage, die Standardsortierung in der Datenbank zu ignorieren und stattdessen die bereitgestellte Sortierung zu verwenden, in diesem Fall SQL_Latin1_General_CP1_CI_AS .

Im Grunde geht es hier darum, dass jede Datenbank ihre eigene Sortierung hat, die "Sortierregeln, Groß- und Kleinschreibung und Akzentempfindlichkeitseigenschaften für Ihre Daten bereitstellt" (von http://technet.microsoft.com/en-us/library/ms143726.aspx ) und gilt für Spalten mit Textdatentypen , z.B. VARCHAR , CHAR , NVARCHAR usw. Wenn zwei Datenbanken unterschiedliche Sortierungen haben, können Sie Textspalten nicht mit einem Operator wie Gleichheit (=) vergleichen, ohne den Konflikt zwischen den beiden unterschiedlichen Sortierungen zu lösen.