Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Unikalna kolumna SQL Server 2008 uwzględniająca wielkość liter

Unikatowość można wymusić za pomocą ograniczenia niepowtarzalności.

To, czy w unikalnym indeksie jest rozróżniana wielkość liter, określa porównanie serwera (lub tabeli). .

Możesz uzyskać bieżące sortowanie bazy danych za pomocą tego zapytania:

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

i powinieneś otrzymać coś takiego:

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

Tutaj „CI_AS” na końcu sortowania oznacza:CI =bez uwzględniania wielkości liter, AS =z uwzględnieniem akcentów.

Można to zmienić na to, czego potrzebujesz. Jeśli twoja baza danych i/lub tabela ma sortowanie z uwzględnieniem wielkości liter, spodziewam się, że unikatowość twojego indeksu również będzie uwzględniać wielkość liter, np. Twój abcdef i ABCDEF powinny być akceptowalne jako unikalne ciągi.

Marek

AKTUALIZACJA:

Właśnie tego spróbowałem (SQL Server 2008 Developer Edition x64) - działa dla mnie (moja baza danych generalnie używa sortowania "Latin1_General_CI_AS, ale mogę zdefiniować inne na tabelę / na kolumnę VARCHAR):

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

i wracam:

string
ABC
abc

i żadnych błędów dotyczących naruszenia unikalnego indeksu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. wstaw podciąg do nowej kolumny

  2. Parametr wyceniany w tabeli w procedurze składowanej i Entity Framework 4.0

  3. przechowywanie plików na serwerze sql 2008 przy użyciu opcji filestream

  4. Oblicz dni obecne i nieobecne w tabeli

  5. Parsowanie OpenXML z wieloma elementami o tej samej nazwie