Colonne unique SQL Server 2008 sensible à la casse

Existe-t-il un moyen de rendre une colonne à la fois UNIQUE et sensible à la casse?

Je veux pouvoir mettre

abcde et ABCDE

dans une colonne unique.

L'unicité peut être appliquée avec une contrainte unique.

Que l'index unique soit sensible ou non à la casse est défini par le classment du server (ou de la table).

Vous pouvez get le classment actuel de votre database avec cette requête:

SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation; 

et vous devriez get quelque chose comme:

 SQLCollation ———————————— SQL_Latin1_General_CP1_CI_AS 

Ici, le "CI_AS" à la fin du classment signifie: CI = Case Insensitive, AS = Accent sensible.

Cela peut être changé pour ce que vous voulez qu'il soit. Si votre database et / ou table a un classment sensible à la casse, je m'attendrais à ce que l'unicité de votre index soit également sensible à la casse, par exemple vos abcdef et ABCDEF devraient être acceptables comme strings uniques.

Marc

METTRE À JOUR:

J'ai juste essayé cela (SQL Server 2008 Developer Edition x64) – fonctionne pour moi (ma database utilise généralement le "classment Latin1_General_CI_AS, mais je peux même définir un différent par table / par colonne VARCHAR même):

 CREATE TABLE TestUnique (ssortingng VARCHAR(50) COLLATE SQL_Latin1_General_Cp1_CS_AS) CREATE UNIQUE INDEX UIX_Test ON dbo.TestUnique(ssortingng) INSERT INTO dbo.TestUnique(ssortingng) VALUES ('abc') INSERT INTO dbo.TestUnique(ssortingng) VALUES ('ABC') SELECT * FROM dbo.TestUnique 

et je reviens:

 ssortingng ABC abc 

et aucune erreur sur l'index unique étant violé.

Dans le cas où quelqu'un doit le faire sur une table existante qui a déjà une unique key/index définie sur une colonne varchar / nvarchar , voici le script.

 ALTER TABLE [YourTable] DROP CONSTRAINT [UIX_YourUniqueIndex] GO ALTER TABLE [YourTable] ALTER COLUMN [YourColumn] [nvarchar](50) COLLATE Latin1_General_CS_AS NOT NULL; GO ALTER TABLE [YourTable] ADD CONSTRAINT [UIX_YourUniqueIndex] UNIQUE NONCLUSTERED ( [YourColumn] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO 

J'avais besoin d'importer des données à partir d'une database sensible à la casse. Lorsque j'ai essayé de mettre la key primaire sur la colonne qui est la key primaire sur la source, je ne pouvais pas le faire à cause de keys en double. J'ai modifié le classment de la colonne (varchar) en fonction de la casse (clic droit sur la table, choisissez Design, select la colonne que vous souhaitez modifier et click l'elipsis dans Collation) et maintenant cela fonctionne bien. (SQL Server 2008 R2 64 bits).

Merci @Devraj Gadhavi pour l'étape par étape car c'est exactement ce que je devais faire aussi bien. J'étais sur le sharepoint faire ces scripts mais ensuite (en utilisant SSMS 2008R2), j'ai réalisé la même chose d'une manière plus paresseuse :-). Dans l'arborescence, j'ai localisé ma table et ma colonne, puis j'ai cliqué à droite sur la colonne pour laquelle je voulais changer le classment et j'ai choisi 'Modifier'. Dans la window affichée, j'ai changé le classment dans les propriétés à la casse, puis partout dans l'espace ouvert dans la section supérieure de la window (où les colonnes sont répertoriées sous forme de tableau) J'ai fait un clic droit et choisi … "