Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Eindeutige SQL Server 2008-Spalte, bei der zwischen Groß- und Kleinschreibung unterschieden wird

Die Eindeutigkeit kann mit einer Unique-Einschränkung erzwungen werden.

Ob beim eindeutigen Index zwischen Groß- und Kleinschreibung unterschieden wird oder nicht, wird durch die Sortierung des Servers (oder der Tabelle) definiert .

Sie können die aktuelle Sortierung Ihrer Datenbank mit dieser Abfrage abrufen:

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

und Sie sollten so etwas wie:

erhalten
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS

Hier bedeutet das "CI_AS" am Ende der Sortierung:CI =Case Insensitive, AS =Accent sensitive.

Dies kann so geändert werden, wie Sie es benötigen. Wenn Ihre Datenbank und/oder Tabelle eine Sortierung mit Unterscheidung zwischen Groß- und Kleinschreibung hat, würde ich erwarten, dass die Eindeutigkeit Ihres Index auch zwischen Groß- und Kleinschreibung unterscheidet, z. Ihr abcdef und ABCDEF sollten sowohl als eindeutige Zeichenfolgen akzeptabel sein.

Markus

UPDATE:

Ich habe das gerade ausprobiert (SQL Server 2008 Developer Edition x64) - funktioniert bei mir (meine Datenbank verwendet im Allgemeinen die Sortierung "Latin1_General_CI_AS", aber ich kann sogar eine andere pro Tabelle / pro VARCHAR-Spalte definieren):

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

und ich bekomme zurück:

string
ABC
abc

und kein Fehler, dass der eindeutige Index verletzt wird.