Jedinečnost může být vynucena jedinečným omezením.
Zda jedinečný index rozlišuje malá a velká písmena, je definováno kolováním serveru (nebo tabulky) .
Aktuální řazení vaší databáze můžete získat pomocí tohoto dotazu:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
a měli byste dostat něco jako:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
Zde „CI_AS“ na konci porovnávání znamená:CI =Bez ohledu na malá a velká písmena, AS =Citlivost na akcenty.
To lze změnit na cokoliv, co potřebujete. Pokud má vaše databáze a/nebo tabulka řazení rozlišující malá a velká písmena, očekával bych, že jedinečnost vašeho indexu bude také rozlišovat malá a velká písmena, např. váš abcdef a ABCDEF by měly být oba přijatelné jako jedinečné řetězce.
Marc
AKTUALIZACE:
Právě jsem to zkusil (SQL Server 2008 Developer Edition x64) - funguje pro mě (moje databáze obecně používá "Latin1_General_CI_AS Collation, ale mohu definovat jinou pro každou tabulku / pro každý sloupec VARCHAR dokonce):
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
a vrátím se:
string
ABC
abc
a žádná chyba o porušení jedinečného indexu.