2013-12-23 1 views
5

я имел смотреть Youtube видео учебника учит, как создать уникальный ключКак создать уникальный ключ для столбца varchar для базы данных сущности?

http://www.youtube.com/watch?v=oqrsfatxTYE&list=PL08903FB7ACA1C2FB&index=9

В видео, он создал уникальный ключ для электронной почты колонка (NVARCHAR), я мог бы создать его, когда я создать базу данных вручную, но когда я пытаюсь создать уникальный ключ для базы данных, созданных с рамочной сущностью кодом первым, используя следующий запрос

ALTER TABLE Peoples 
    ADD CONSTRAINT UQ_MyTable_Email UNIQUE (email) 

Он будет генерировать ошибку:

Msg 1919, Level 16, State 1, Line 2 
Column 'email' in table 'Peoples' is of a type that is invalid for use as a key column in an index. 

Что такое проблема? что я могу сделать для создания уникального ключа для столбца nvarchar (max)?

+0

Что длина данных для вас электронная почта conlumn ?? –

+0

- столбец nvarchar (max) – Lai32290

+2

здесь вы идете, в-1 вы не можете создавать никакие идексы в столбцах VARCHAR (MAX), когда вы создаете ограничение Unique, которое фактически создает некластеризованный уникальный индекс за кулисами. вам нужно изменить свой тип данных и посмотреть мой ответ для получения более подробной информации. –

ответ

7

сказать Если вы создаете эту таблицу

CREATE TABLE ConstTable 
(ID INT, 
Email VARCHAR(1000) 
CONSTRAINT uc_Email UNIQUE (Email) 
) 
GO 

вы получите предупреждение:

Warning! The maximum key length is 900 bytes. The index 'uc_Email' has maximum length of 1000 bytes. For some combination of large values, the insert/update operation will fail

Ваш столбец, на котором вы хотите установить ограничение уникальности должно быть меньше или равным 900 байт , поэтому у вас может быть столбец VARCHAR(900) или NVARCHAR(450), если вы хотите создать уникальное ограничение для этой колонки

Та же таблица a Бова с VARCHAR (450) получает создана без предупреждения

CREATE TABLE ConstTable 
(ID INT, 
Email VARCHAR(900) 
CONSTRAINT uc_Email UNIQUE (Email) 
) 
GO 

Результат

Command(s) completed successfully.

Тест для таблицы

говорит, что это ваш стол

CREATE TABLE ConstTable 
(ID INT, 
Email VARCHAR(MAX) 
) 
GO 

Теперь попробуйте создайте любой индекс в типе данных VARCHAR (MAX), и вы получите ту же ошибку.

CREATE INDEX ix_SomeIdex 
ON ConstTable (Email) 

Сообщение об ошибке

Msg 1919, Level 16, State 1, Line 1 Column 'Email' in table 'ConstTable' is of a type that is invalid for use as a key column in an index.

Смежные вопросы