Подтвердить что ты не робот

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

У меня есть таблица, где я храню данные о сотрудниках. Я хочу изменить таблицу и установить один из столбцов emp_code в качестве первичного ключа. Его тип данных nvarchar(max), но я не могу установить его как первичный ключ.

Я запускаю следующий запрос:

ALTER TABLE user_master
ADD PRIMARY KEY (emp_code)

но это дает мне ошибку:

Msg 1919, уровень 16, состояние 1, строка 1
Столбец emp_code в таблице user_master имеет тип, который недопустим для использования в качестве ключевого столбца в индексе.
Msg 1750, уровень 16, состояние 0, строка 1
Не удалось создать ограничение. См. Предыдущие ошибки.

Как я могу это преодолеть?

4b9b3361

Ответ 1

Ключ индекса не может превышать общий размер 900 байт. Измените тип данных на NVARCHAR(450). Если это не подходит, используйте ключ суррогата (обычно это столбец IDENTITY).

Ответ 2

Вы не можете использовать varchar(max). Он не предназначен для хранения первичных ключей.

Узнайте, какой самый длинный код сотрудника, и создайте размер nvarchar, который охватывает ваш самый длинный случай.

например. самый длинный код сотрудника - 70 символов, попробуйте: -

nvarchar(100)

... просто чтобы покрыть себя.

Ответ 3

Да, вы правы. Предупреждение! Максимальная длина ключа - 900 байт. Индекс PK__bookmark__2DFA2B0E164452B1 имеет максимальную длину 2000 байт. Для некоторой комбинации больших значений операция вставки/обновления завершится с ошибкой. не использовать varchar(max)