У меня ошибка в
Column 'key' in table 'misc_info' is of a type that is invalid for use as a key column in an index.
где ключ - это nvarchar (макс.) Быстрый Google нашел это . Однако это не объясняет, что такое решение. Как мне создать что-то вроде словаря, в котором ключ и значение являются строками и, очевидно, ключ должен быть уникальным и единственным. Мое заявление было
create table [misc_info] (
[id] INTEGER PRIMARY KEY IDENTITY NOT NULL,
[key] nvarchar(max) UNIQUE NOT NULL,
[value] nvarchar(max) NOT NULL);
Ответы:
Уникальное ограничение не может превышать 8000 байт на строку, и даже тогда будут использоваться только первые 900 байт, поэтому максимальный максимальный размер для ваших ключей будет:
т.е. ключ не может быть более 450 символов. Если вы можете переключиться на
varchar
вместоnvarchar
(например, если вам не нужно хранить символы из более чем одной кодовой страницы), это может увеличиться до 900 символов.источник
varchar(900)
ИЛИnvarchar(450)
.ID1 int
в индекс. Этоint
требует 4 байта, в дополнение к 900 байтов дляvarchar
.В SQL Server есть ограничение (до 2008 R2), что varchar (MAX) и nvarchar (MAX) (и некоторые другие типы, такие как text, ntext) не могут использоваться в индексах. У вас есть 2 варианта:
1. Установить ограниченный размер в ключевом поле напр. nvarchar (100)
2. Создайте проверочное ограничение, которое сравнивает значение со всеми ключами в таблице. Состояние:
и [dbo]. [CheckKey] является скалярной функцией, определенной как:
Но обратите внимание, что собственный индекс является более производительным, чем проверочное ограничение, поэтому, если вы действительно не можете указать длину, не используйте проверочное ограничение.
источник
Единственное решение - использовать меньше данных в вашем уникальном индексе. Ваш ключ может быть NVARCHAR (450) максимум.
«SQL Server сохраняет ограничение в 900 байт для максимального общего размера всех столбцов ключа индекса».
Узнайте больше на MSDN
источник
Решением было бы объявить ваш ключ как
nvarchar(20)
.источник
Если принять во внимание комментарий Клайсбыскова о том, что длина ключа должна быть в гигабайтах, и предположить, что вам это действительно нужно, то я думаю, что единственные варианты:
Хеширование сопровождается оговоркой, что однажды вы можете столкнуться.
Триггеры будут сканировать всю таблицу.
К вам ...
источник