Уникальность может быть обеспечена с помощью уникального ограничения.
Является ли уникальный индекс чувствительным к регистру или нет, определяется сервером (или таблицей) параметры сортировки .
Вы можете получить текущую сортировку вашей базы данных с помощью этого запроса:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
и вы должны получить что-то вроде:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
Здесь "CI_AS" в конце сопоставления означает: CI = без учета регистра, AS = с учетом акцента.
Это можно изменить на то, что вам нужно. Если в вашей базе данных и / или таблице есть сопоставление с учетом регистра, я ожидаю, что уникальность вашего индекса также будет зависеть от регистра, например, Ваши abcdef и ABCDEF должны быть приемлемы как уникальные строки.
Марк
UPDATE:
Я только что попробовал это (SQL Server 2008 Developer Edition x64) - работает для меня (моя база данных обычно использует сортировку "Latin1_General_CI_AS, но я могу определить другой для таблицы / даже для столбца 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
и я вернусь:
string
ABC
abc
и нет ошибки о нарушении уникального индекса.