La tentative de changer ce paramètre dans les options de bases de données est bien entendu vouée à l’échec : le classement est configuré au niveau de chaque colonne de notre base de données, et c’est ici qu’il faudra intervenir…
Pour rappel, lorsque vous installez une instance SQL Server, vous spécifiez un classement par défaut. Ce paramètre va déterminer la configuration des bases de données système, il est donc impossible de le modifier sauf à les reconstruire entièrement.
Une base de données possède aussi un classement par défaut. Si vous ne spécifiez rien au moment de sa création, elle hérite automatiquement du classement par défaut de l’instance.
Il est cependant tout à fait possible d’avoir une base de données avec un classement par défaut différent de celui de l’instance. Cela ne pose à priori pas de problème, sauf si certaines applications créent et utilisent des tables temporaires sans spécifier explicitement leur classement : la base tempdb (et donc les tables temporaires créées sans rien spécifier) ayant hérité du classement de l’instance, une jointure entre deux colonnes de classements différents provoquera une erreur.
La modification du classement d’une base de données implique donc d’abord de faire ce changement au niveau de chaque colonne de type caractère. Si cette opération peut sembler simple avec une série d’instructions ALTER TABLE … ALTER COLUMN, il n’en n’est rien : pour pouvoir modifier chacune de ces colonnes, il faut s’assurer :

  • Qu’elle ne fasse pas l’objet d’une contrainte CHECK
  • Qu’elle ne soit pas une clé primaire ou une clé étrangère
  • Qu’elle ne fasse partie d’aucun index, clustered ou non
  • Qu’elle n’est utilisée pour aucune statistique personnalisée

Il faudra donc supprimer tous ces éléments pour les recréer après changement du classement. Accessoirement, il faudra aussi supprimer toute configuration de la réplication, ainsi que les tables de diagramme (sysdiagram, dtproperties) ou de journal SSIS (sysssislog). Tout ceci n’est pas nécessairement exhaustif !
Il peut donc apparaître plus simple à certains DBA de créer une nouvelle base de données avec le classement cible et d’y importer toutes les données : l’opération est très lourde aussi, personnellement ce n’est pas la procédure que je préfère…
De plus, cela n’empêche pas un autre problème : le changement de classement peut générer des doublons. Imaginons que nous passons d’un classement sensible à un classement insensible aux accents : le risque existe de découvrir de nouveaux doublons, qui nous empêcheront de recréer les clés primaires et index uniques ou d’y insérer des données !
Vous voyez donc que l’opération risque d’être complexe.
Personnellement, je préfère la procédure de modification « en place » avec des ALTER TABLE … ALTER COLUMN … Ayant réalisé cette opération à plusieurs reprises, je vous soumets un petit squelette de script en 12 étapes : bon courage… !

/********* Modification de classement - template ************/
-- 1. Supprimer la réplication, les tables système bloquantes et autres éléments bloquants 
-- !! Effectuer ce nettoyage avant de générer les scripts de modification
    USE master
    EXEC sp_removedbreplication @dbname = 'xxxxx'
    USE [xxxxx]
    DROP TABLE sysdiagrams
    DROP TABLE dtproperties
    DROP TABLE sysssislog
-- !! Préalable : passer la base en mode de récupération SIMPLE
-- 2. Supprimer toutes les contraintes CHECK
IF 1=1 BEGIN
PRINT 'Drop CHECK Constraints'
-- insérer script ici. Génération avec : Generate Check Constraint operations.sql
END
GO
-- 3. Supprimer toutes les FK
IF 1=1 BEGIN
PRINT 'Drop FK Constraints'
-- insérer script ici. Génération avec : Generate FK operations.SQL
END
GO
-- 4. Supprimer tous les index non clustered puis clustered  qui utilisent les colonnes concernées
IF 1=1 BEGIN
PRINT 'Drop index'
-- insérer les scripts ici.
-- Génération 1 avec : Generate nonclustered index operations.sql
-- Génération 2 avec : Generate clustered index operations.sql
END
GO
-- 5. Supprimer toutes les statistiques utilisateur sur des colonnes caractère
IF 1=1 BEGIN
PRINT 'Drop statistics'
-- insérer les scripts ici. Génération avec : Generate statistics operations.sql
END
GO
-- 6. Changer le classement des colonnes
IF 1=1 BEGIN
PRINT 'Alter columns'
-- insérer script ici. Génération avec : Generate alter columns operations.sql
END
GO
-- 7. Changer le classement de la base de données
    USE master
    GO
    -- accès exclusif à la base nécessaire
    ALTER DATABASE xxxxxx COLLATE Latin1_General_CI_AI
    GO
    USE xxxxxx
-- 8. Recréer tous les index clustered puis non clustered qui utilisent les colonnes concernées
IF 1=1 BEGIN
PRINT 'Create index'
-- insérer les scripts ici. Attention à l'ordre !
-- Génération 1 avec : Generate clustered index operations.sql
-- Génération 2 avec : Generate nonclustered index operations.sql
END
GO
--9. Recréer toutes les statistiques utilisateur sur des colonnes caractère
IF 1=1 BEGIN
PRINT 'Create statistics'
-- insérer les scripts ici. Génération avec : Generate statistics operations.sql
END
GO
-- 10. Recréer toutes les FK avec NOCHECK --> Generate FK operations.sql
IF 1=1 BEGIN
PRINT 'Create FK'
-- insérer script ici. Génération avec : Generate FK operations.sql
END
GO
-- 11. Recréer toutes les contraintes CHECK avec NOCHECK
IF 1=1 BEGIN
PRINT 'Create CHECK Constraints'
-- insérer script ici. Génération avec : Generate Check Constraint operations.sql
END
GO
-- 12. Recréer les objets supprimés si nécessaire
-- FIN