Ответ 1
Ключ индекса не может превышать общий размер 900 байт. Измените тип данных на NVARCHAR(450)
. Если это не подходит, используйте ключ суррогата (обычно это столбец IDENTITY
).
У меня есть таблица, где я храню данные о сотрудниках. Я хочу изменить таблицу и установить один из столбцов 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
Не удалось создать ограничение. См. Предыдущие ошибки.
Как я могу это преодолеть?
Ключ индекса не может превышать общий размер 900 байт. Измените тип данных на NVARCHAR(450)
. Если это не подходит, используйте ключ суррогата (обычно это столбец IDENTITY
).
Вы не можете использовать varchar(max)
. Он не предназначен для хранения первичных ключей.
Узнайте, какой самый длинный код сотрудника, и создайте размер nvarchar, который охватывает ваш самый длинный случай.
например. самый длинный код сотрудника - 70 символов, попробуйте: -
nvarchar(100)
... просто чтобы покрыть себя.
Да, вы правы. Предупреждение! Максимальная длина ключа - 900 байт. Индекс PK__bookmark__2DFA2B0E164452B1
имеет максимальную длину 2000 байт. Для некоторой комбинации больших значений операция вставки/обновления завершится с ошибкой.
не использовать varchar(max)