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

Colonne unique SQL Server 2008 sensible à la casse

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

Le fait que l'index unique soit ou non sensible à la casse est défini par le classement du serveur (ou de la table) .

Vous pouvez obtenir le classement actuel de votre base de données avec cette requête :

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

et vous devriez obtenir quelque chose comme :

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

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

Cela peut être changé en tout ce dont vous avez besoin. Si votre base de données et/ou table a un classement sensible à la casse, je m'attendrais à ce que l'unicité de votre index soit également sensible à la casse, par ex. votre abcdef et ABCDEF doivent être acceptables en tant que chaînes uniques.

Marc

MISE À JOUR :

Je viens d'essayer ceci (SQL Server 2008 Developer Edition x64) - fonctionne pour moi (ma base de données utilise généralement le classement "Latin1_General_CI_AS, mais je peux en définir un différent par table / par colonne VARCHAR même):

CREATE TABLE TestUnique
    (string VARCHAR(50) COLLATE SQL_Latin1_General_Cp1_CS_AS)

CREATE UNIQUE INDEX UIX_Test ON dbo.TestUnique(string)

INSERT INTO dbo.TestUnique(string) VALUES ('abc')
INSERT INTO dbo.TestUnique(string) VALUES ('ABC')

SELECT * FROM dbo.TestUnique

et je reviens :

string
ABC
abc

et aucune erreur concernant la violation de l'index unique.