sql >> Databasteknik >  >> RDS >> Sqlserver

Hur fixar man en sorteringskonflikt i en SQL Server-fråga?

Du kan lösa problemet genom att tvinga sorteringen som används i en fråga att vara en viss sortering, t.ex. SQL_Latin1_General_CP1_CI_AS eller DATABASE_DEFAULT . Till exempel:

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 ovanstående fråga skulle a.MyID och b.YourID vara kolumner med en textbaserad datatyp. Använder COLLATE kommer att tvinga frågan att ignorera standardsorteringen i databasen och istället använda den tillhandahållna sorteringen, i det här fallet SQL_Latin1_General_CP1_CI_AS .

Det som i grund och botten händer här är att varje databas har sin egen sortering som "tillhandahåller sorteringsregler, skiftläges- och accentkänslighetsegenskaper för dina data" (från http://technet.microsoft.com/en-us/library/ms143726.aspx ) och gäller kolumner med textdatatyper , t.ex. VARCHAR , CHAR , NVARCHAR , etc. När två databaser har olika sortering kan du inte jämföra textkolumner med en operator som lika (=) utan att ta itu med konflikten mellan de två olika sorteringarna.



  1. Är en RID-sökning snabbare än en nyckelsökning?

  2. 911/112:En nödsamtalstjänstdatamodell

  3. Hur skickar jag sqlparameter till IN()?

  4. Dynamiskt alternativ till pivot med CASE och GROUP BY