Om man inte tänker till när man sätter upp en ny miljö och har en annan collation än man hade tidigare kan man få problem. Det vanligaste problemet man får är att det blir problem i where eller join delen av en fråga mot en temptabell och får ett felmeddelande som är:
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.
Det finns några olika sätt att komma runt det här problemet. Det första man ska göra är förstås att kolla upp vad man ska ha för collation och om det inte är den som är installerat på servern för tillfället kan det ofta vara lättare att installera om servern med rätt collation än att försöka ändra alla sytemtabeller till en ny. Är det bara så att databasen man har läst in till den nya server ska ändras kan man göra något av följande sätt.
1. Uppdatera frågan med collate database_default efter matchningen. Det är förstås ingen smidig lösning om man har problemet på flera ställen.
a.EmailAddress = ot.EmailAddress COLLATE DATABASE_DEFAULT
2.Ändra collation för databasen. Problemet med den här lösningen är att man bara kommer halvvägs. Problemet men stöter på här är att alla nya objekt som skapas kommer att ha den valda collationen men alla gamla objekt kommer ha kvar samma som tidigare. Man kan gå in och ändra tabell för tabell och kolumn för kolumn antingen med script eller i SQL Management Studio men det tar lång tid och är tråkigt.
ALTER DATABASE testDB COLLATE SQL_Latin1_General_CP1_CI_AS
Problemet med den här lösningen är att man bara kommer halvvägs för att att alla nya objekt som skapas kommer att ha den valda collationen men alla gamla objekt kommer ha var samma som tidigare. Man kan gå in och ändra tabell för tabell och kolumn för kolumn antingen med script eller i SQL Management Studio men det tar lång tid och är tråkigt.
Efter ganska mycket letande hittade jag till slut en lösning som Igor Kovalenko bloggade om. Han har skapat ett script som du klistrar in i Management Studio ändrar parametrarna för databas och collation och så kör man scriptet i SQLCMD mode. Jag körde det i SQL Server 2008 och upptäckte inga kompatibilitetsproblem.
change_collation.sql (103,49 kb)