Как исправить ошибку создания уникального индекса по NVARCHAR(MAX)?

Мне нужно создать таблицу Faculties SQL запросом, но строка
Dean nvarchar(max) NOT NULL check(Dean != '') unique,

возвращает ошибку:
Msg 1919, Level 16, State 1, Line 7
Тип столбца "Dean" в таблице "Faculties" не позволяет выбрать его в качестве ключевого столбца индекса.

Вот код остальной таблицы:
CREATE TABLE Faculties(
	Id int primary key NOT NULL IDENTITY(1,1),
	Dean nvarchar(max) NOT NULL check(Dean != '') unique,
	[Name] nvarchar(100) NOT NULL check([Name] != '') unique
)
  • Вопрос задан
  • 508 просмотров
Решения вопроса 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
NVARCHAR(MAX) не индексируется.
CREATE TABLE Faculties(
  ID INT PRIMARY KEY NOT NULL IDENTITY(1,1),
  Dean NVARCHAR(MAX) NOT NULL CHECK(Dean<>''),
  DeanIndex AS HASHBYTES('SHA',Dean) UNIQUE,
  Name NVARCHAR(100) NOT NULL CHECK(Name<>'') UNIQUE
)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Длина nvarchar(max) - до 231-1 байт.
Длина некластерного ключа - 1700 байт.
Логично, что поле в ключ не помещается.
Вы уверены, что у вас работают деканы с такими длинными именами?
А по хорошему, в этом поле должен быть id декана в таблице сотрудников.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы