sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server 2008 Unik kolonne, der skelner mellem store og små bogstaver

Det unikke kan håndhæves med en unik begrænsning.

Hvorvidt det unikke indeks er forskel på store og små bogstaver eller ej, er defineret af serverens (eller tabellens) sortering .

Du kan få den aktuelle samling af din database med denne forespørgsel:

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

og du burde få noget som:

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

Her betyder "CI_AS" i slutningen af ​​sorteringen:CI =Case Insensitive, AS =Accentsensitive.

Dette kan ændres til hvad du har brug for. Hvis din database og/eller tabel alligevel har en versalfølsom kollation, vil jeg forvente, at det unikke ved dit indeks også vil være case-sensitive, f.eks. din abcdef og ABCDEF bør både være acceptable som unikke strenge.

Marc

OPDATERING:

Jeg har lige prøvet dette (SQL Server 2008 Developer Edition x64) - virker for mig (min database bruger generelt "Latin1_General_CI_AS-sorteringen, men jeg kan selv definere en anden pr. tabel / pr. VARCHAR-kolonne):

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

og jeg vender tilbage:

string
ABC
abc

og ingen fejl om, at det unikke indeks er blevet overtrådt.



  1. Adgang til Postgres RDS fra Kubernetes-klyngen i AWS

  2. PostgreSQL unnest() med elementnummer

  3. MyISAM vs InnoDB for hurtige indsættelser og en sammensat unik nøgle

  4. Returner resultater af en sql-forespørgsel som JSON i oracle 12c