2009-01-27 5 views
32

Comment créer une contrainte unique sur un champ varchar sensible à la casse (SQL Server 2005)?T-SQL: Comment créer une clé unique sensible à la casse?

Actuellement ma contrainte ressemble à ceci:

alter table MyTable 
add constraint UK_MyTable_MyUniqueKey unique nonclustered (MyCol) 

Lorsque je tente d'insérer les deux valeurs suivantes, je reçois une erreur « Violation de contrainte UNIQUE KEY ... ». Je voudrais que les deux valeurs différemment traitées soient traitées comme unqiue. J'imagine que cela impliquera le code suivant, mais je ne sais pas comment cela change ma syntaxe add constraint.

COLLATE SQL_Latin1_General_CP1_CS_AS 
+0

voulez-vous dire cas «sensible» ou insensible? si ABC et abc sont résolus tous les deux, alors il s'agit d'une comparaison inéquitable. Vous pourriez reformuler la question – keithwarren7

+0

oui - vous avez raison. Merci – Seibar

Répondre

40

Cela modifiera la colonne pour qu'elle soit sensible à la casse. Je ne pense pas qu'il y ait un changement à votre contrainte ...

ALTER TABLE mytable 
ALTER COLUMN mycolumn VARCHAR(10) 
COLLATE SQL_Latin1_General_CP1_CS_AS 

Tout sélectionner ou rejoint sur cette colonne deviendra sensible à la casse à la suite de cette opération.

+0

Est-ce que toutes les sélections de cette colonne seront également sensibles à la casse? – Seibar

+7

Tout ce qui concerne cette colonne sera sensible à la casse. –

+4

Vous devrez supprimer la contrainte, lancer l'ALTER, ajouter à nouveau le PK pour gérer la dépendance – gbn

4

Vous pouvez uniquement définir la sensibilité à la casse des données dans la base de données (plus petite granularité de la colonne). Vous ne pouvez pas définir la sensibilité à la casse d'un index - cela équivaudrait à pouvoir indexer sur une expression, ce qui est possible dans certaines bases de données mais pas dans Sql Server.