T-SQL: comment créer une clé unique sensible à la casse?

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

Actuellement ma contrainte ressemble à ceci:

alter table MyTable
add constraint UK_MyTable_MyUniqueKey unique nonclustered (MyCol)

Lorsque j'essaie d'insérer les deux valeurs suivantes, j'obtiens une "Violation de la contrainte de clé UNIQUE..." erreur.

insert into MyTable (MyCol) values ('ABC')
insert into MyTable (MyCol) values ('abc') --causes a violation of UNIQUE KEY constraint 'UK_MyTable_MyUnqiueKey'

Je voudrais que les deux valeurs à boîtier différent 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
33
demandé sur Seibar 2009-01-28 00:32:08

2 réponses

Cela va changer la colonne pour être 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

Toutes les sélections ou jointures sur cette colonne deviendront sensibles à la casse à la suite de cette opération.

41
répondu Jason Punyon 2009-01-27 21:45:07

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 - ce qui équivaudrait à pouvoir indexer sur une expression, ce qui est possible dans certaines bases de données mais pas dans Sql Server.

4
répondu dkretz 2009-01-27 21:45:03