sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server 2008 Unik kolumn som är skiftlägeskänslig

Det unika kan upprätthållas med en unik begränsning.

Huruvida det unika indexet är skiftlägeskänsligt eller inte definieras av serverns (eller tabellens) sortering .

Du kan få den aktuella sorteringen av din databas med denna fråga:

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

och du borde få något som:

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

Här betyder "CI_AS" i slutet av sorteringen:CI =Skiftlägesokänslig, AS =Accentkänslig.

Detta kan ändras till vad du vill att det ska vara. Om din databas och/eller tabell har en skiftlägeskänslig kollation, skulle jag förvänta mig att unikheten i ditt index också kommer att vara skiftlägeskänslig, t.ex. din abcdef och ABCDEF bör vara både acceptabla som unika strängar.

Marc

UPPDATERING:

Jag har precis provat detta (SQL Server 2008 Developer Edition x64) - fungerar för mig (min databas använder vanligtvis "Latin1_General_CI_AS-sorteringen, men jag kan definiera en annan per tabell / per VARCHAR-kolumn till och med):

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

och jag får tillbaka:

string
ABC
abc

och inget fel om att det unika indexet har brutits.



  1. Vad ska jag använda istället för sekvens för att undvika luckor?

  2. Behöver hjälp med en Postgres trigger och funktion

  3. Kan inte skicka parameter 2 genom referens - uuid PDO

  4. Hur kontrollerar jag prestanda för mysql-frågan?