sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan rettes en kollationskonflikt i en SQL Server-forespørgsel?

Du kan løse problemet ved at tvinge den sortering, der bruges i en forespørgsel, til at være en bestemt sortering, f.eks. SQL_Latin1_General_CP1_CI_AS eller DATABASE_DEFAULT . For eksempel:

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

I ovenstående forespørgsel vil a.MyID og b.YourID være kolonner med en tekstbaseret datatype. Brug af COLLATE vil tvinge forespørgslen til at ignorere standardsorteringen på databasen og i stedet bruge den angivne sortering, i dette tilfælde SQL_Latin1_General_CP1_CI_AS .

Grundlæggende er det, der foregår her, at hver database har sin egen kollation, som "leverer sorteringsregler, kasus- og accentfølsomhedsegenskaber for dine data" (fra http://technet.microsoft.com/en-us/library/ms143726.aspx ) og gælder for kolonner med tekstdatatyper , for eksempel. VARCHAR , CHAR , NVARCHAR , osv. Når to databaser har forskellige sorteringer, kan du ikke sammenligne tekstkolonner med en operator som lig (=) uden at løse konflikten mellem de to forskellige sorteringer.



  1. Fjerner duplikerede rækker fra tabellen i Oracle

  2. Oracle sæt operatører

  3. MySQL-forberedte erklæringer

  4. dårlig Hibernate vælg ydeevne sammenlignet med at køre direkte - hvordan fejlfindes?