[SQL Server] Rendre des champs sensibles à la casse

Une technique découverte bien utile pour rendre des champs « case sensitive » sur une requête SQL : utiliser la clause COLLATE.
Prenons l’exemple simple d’une recherche d’un client dans une table de notre base de données :

SELECT Prenom, Nom
FROM Client
WHERE Nom = 'dupond'

On cherche ici à récupérer le nom et le prénom du client ‘dupond’, or celui-ci pourrait très bien avoir son nom enregistré en tant que ‘Dupond’ ou bien même ‘DUPOND’. Si c’est le cas, alors la clause WHERE ne trouvera pas de ‘dupond’ tout en minuscule.

Solution :

Pour rendre les requêtes sensibles à la casse et récupérer un seul enregistrement (« dupond »), la « collation » de la requête doit être modifié comme suit.

SELECT Prenom, Nom
FROM Client
WHERE Nom COLLATE Latin1_General_CS_AS = 'dupond'

La « collation » par défaut de SQL Server à l’installation SQL_Latin1_General_CP1_CI_AS n’est pas sensible à la casse.

Il est aussi possible de changer la « collation » de façon permanente sur n’importe quelle colonne :

ALTER TABLE Client
ALTER COLUMN Nom VARCHAR(20)
COLLATE Latin1_General_CS_AS

Partagez: