T-SQL: как создать уникальный ключ, чувствительный к регистру? - PullRequest
35 голосов
/ 28 января 2009

Как создать уникальное ограничение для поля varchar с учетом регистра (SQL Server 2005)?

В настоящее время мое ограничение выглядит следующим образом:

alter table MyTable
add constraint UK_MyTable_MyUniqueKey unique nonclustered (MyCol)

Когда я пытаюсь вставить следующие два значения, я получаю ошибку "Нарушение ограничения UNIQUE KEY ...".

insert into MyTable (MyCol) values ('ABC')
insert into MyTable (MyCol) values ('abc') --causes a violation of UNIQUE KEY constraint 'UK_MyTable_MyUnqiueKey'

Я бы хотел, чтобы два разных значения обрабатывались как unqiue. Я предполагаю, что это будет включать следующий код, но я не знаю, как это меняет мой синтаксис add constraint.

COLLATE SQL_Latin1_General_CP1_CS_AS

Ответы [ 2 ]

46 голосов
/ 28 января 2009

Это изменит столбец с учетом регистра. Я не думаю, что есть какие-то изменения в вашем ограничении ...

ALTER TABLE mytable 
ALTER COLUMN mycolumn VARCHAR(10) 
COLLATE SQL_Latin1_General_CP1_CS_AS

Любые операции выбора или объединения в этом столбце станут чувствительными к регистру в результате этой операции.

4 голосов
/ 28 января 2009

Вы можете установить только чувствительность к регистру данных в базе данных (наименьшая гранулярность столбца). Вы не можете установить чувствительность к регистру индекса - это было бы эквивалентно возможности индексировать выражение, что возможно в некоторых базах данных, но не в Sql Server.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...