Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Impossible de résoudre le conflit de classement

Le problème avec les classements est que bien que la base de données ait son propre classement, chaque table et chaque colonne peut avoir son propre classement. S'il n'est pas spécifié, il prend la valeur par défaut de son objet parent, mais peut être différent.

Lorsque vous modifiez le classement de la base de données, ce sera la nouvelle valeur par défaut pour toutes les nouvelles tables et colonnes, mais cela ne change pas le classement des objets existants dans la base de données. Vous devez aller changer manuellement le classement de chaque table et colonne.

Heureusement, il existe des scripts disponibles sur Internet qui peuvent faire le travail. Je ne vais pas en recommander car je ne les ai pas essayés mais voici quelques liens :

http://www.codeproject.com/Articles/302405/The-Easy-way-of-changing-Collation-of-all-Database

Mettre à jour le classement de tous les champs de la base de données à la volée

http://www.sqlservercentral.com/Forums/Topic820675-146-1.aspx

Si vous avez besoin d'avoir un classement différent sur deux objets ou que vous ne pouvez pas changer les classements - vous pouvez toujours JOIN entre eux en utilisant COLLATE commande et en choisissant le classement que vous voulez pour la jointure.

SELECT * FROM A JOIN B ON A.Text = B.Text COLLATE Latin1_General_CI_AS 

ou en utilisant le classement de base de données par défaut :

SELECT * FROM A JOIN B ON A.Text = B.Text COLLATE DATABASE_DEFAULT