sql >> Database >  >> RDS >> Sqlserver

SQL Server 2008 Unieke kolom die hoofdlettergevoelig is

De uniciteit kan worden afgedwongen met een unieke beperking.

Of de unieke index hoofdlettergevoelig is, wordt bepaald door de sortering van de server (of de tabel) .

U kunt de huidige verzameling van uw database krijgen met deze vraag:

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

en je zou zoiets moeten krijgen als:

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

Hier betekent de "CI_AS" aan het einde van de sortering:CI =niet hoofdlettergevoelig, AS =accentgevoelig.

Dit kan worden veranderd in wat u maar wilt. Als uw database en/of tabel een hoofdlettergevoelige sortering heeft, zou ik verwachten dat de uniciteit van uw index ook hoofdlettergevoelig is, b.v. uw abcdef en ABCDEF moeten zowel acceptabel zijn als unieke strings.

Marc

BIJWERKEN:

Ik heb dit net geprobeerd (SQL Server 2008 Developer Edition x64) - werkt voor mij (mijn database gebruikt over het algemeen de "Latin1_General_CI_AS-sortering, maar ik kan een andere per tabel / zelfs per VARCHAR-kolom definiëren):

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

en ik krijg terug:

string
ABC
abc

en geen foutmelding dat de unieke index wordt geschonden.



  1. MySQL haalt laatste datumrecords van meerdere

  2. SQL Server 2008 naar SQL Server 2005

  3. mysql per geval gebruiken in slaapstandcriteria

  4. berekeningen uitvoeren op gegevens in tabeltype