Eu tenho um erro em
Column 'key' in table 'misc_info' is of a type that is invalid for use as a key column in an index.
onde chave é um nvarchar (max). Um rápido google encontrou isso . No entanto, não explica o que é uma solução. Como faço para criar algo como Dictionary, onde a chave e o valor são ambos strings e, obviamente, a chave deve ser única e única. Minha instrução sql foi
create table [misc_info] (
[id] INTEGER PRIMARY KEY IDENTITY NOT NULL,
[key] nvarchar(max) UNIQUE NOT NULL,
[value] nvarchar(max) NOT NULL);
Respostas:
Uma restrição exclusiva não pode ter mais de 8000 bytes por linha e só usará os primeiros 900 bytes, portanto o tamanho máximo mais seguro para suas chaves seria:
ou seja, a chave não pode ter mais de 450 caracteres. Se você pode mudar para em
varchar
vez denvarchar
(por exemplo, se você não precisar armazenar caracteres de mais de uma página de código), isso poderá aumentar para 900 caracteres.fonte
varchar(900)
OUnvarchar(450)
.ID1 int
no índice. Issoint
requer 4 bytes, além dos 900 bytes para o arquivovarchar
.Há uma limitação no SQL Server (até 2008 R2) de que varchar (MAX) e nvarchar (MAX) (e vários outros tipos como texto, ntext) não podem ser usados em índices. Você tem 2 opções:
1. Defina um tamanho limitado no campo chave ex. nvarchar (100)
2. Crie uma restrição de verificação que compare o valor com todas as chaves na tabela. A condição é:
e [dbo]. [CheckKey] é uma função escalar definida como:
Mas observe que um índice nativo tem mais desempenho do que uma restrição de verificação. Portanto, a menos que você não possa especificar um comprimento, não use a restrição de verificação.
fonte
A única solução é usar menos dados no seu Índice Único. Sua chave pode ser NVARCHAR (450) no máximo.
"O SQL Server mantém o limite de 900 bytes para o tamanho total máximo de todas as colunas de chave de índice."
Leia mais no MSDN
fonte
Uma solução seria declarar sua chave como
nvarchar(20)
.fonte
Observando o comentário de klaisbyskov sobre o tamanho da sua chave que precisa ter gigabytes de tamanho e assumindo que você realmente precisa disso, acho que suas únicas opções são:
O hash vem com a ressalva de que um dia você poderá ter uma colisão.
Os gatilhos varrerão a tabela inteira.
Até você ...
fonte