web-dev-qa-db-fra.com

Avertissement! La longueur de clé maximale est de 900 octets. L'index a une longueur maximale de 1000 octets

Je transfère un script db d'un système 64 bits vers un système 32 bits. Lorsque j'exécute le script, cela me donne l'erreur suivante,

Avertissement! La longueur de clé maximale est de 900 octets. L'index "UQ__Users__7E800015145C0A3F" a une longueur maximale de 1000 octets. Pour une combinaison de grandes valeurs, l'opération d'insertion/mise à jour échouera.

Les résultats de Google et les questions de débordement de pile n'ont pas aidé à résoudre ce problème.

26
ShodowOverRide

Pour l'indexation de colonnes de grande taille, sqlserver indexe uniquement les colonnes dont la taille peut atteindre 900 octets.

Pour résoudre ce problème

Tout d'abord: j'ai ajouté une colonne hashCol pour générer un code de hachage de type SHA1 pour MyCol

alter table myTable
    add 
    hashCol AS HASHBYTES('SHA1', CONVERT(VARCHAR(90), MyCol))

Deuxièmement: j'ai ajouté une contrainte unique pour hashCol pour identifier de manière unique MyCol

 ALTER  TABLE  myTable
     ADD CONSTRAINT hashCol_Unique UNIQUE (hashCol)

De cette façon, j'ai surmonté le problème des colonnes d'indexation qui ont une grande taille

les références

Générer un hachage unique pour un champ dans SQL Server in-sql-server

12
Elsayed

La longueur de stockage du type varchar sera +2.

Solution

ALTER TABLE table_name
ALTER COLUMN column_name varchar(255)

essayez donc de réduire la longueur de la colonne à 255 caractères et essayez l'indexation.

4
Rahul Hera

Il semble que vous exécutiez Microsoft SQL Server. Consultez Microsoft: taille maximale des clés d'index pour plus d'informations sur ce sujet. Ou une réponse connexe dans: 900 octets limite de taille d'index en longueur de caractères

3

La longueur combinée de toutes les colonnes doit être inférieure à 900.

-- make combined colum length(to be indexed / add constrains) less <= 900
ALTER TABLE tabbleName ALTER COLUMN col1 VARCHAR (500) NULL;
ALTER TABLE tabbleName ALTER COLUMN col2 VARCHAR (200) NULL;
ALTER TABLE tabbleName ALTER COLUMN col3 VARCHAR (200) NULL;
-- Then add the index
ALTER TABLE tabbleName ADD CONSTRAINT uck UNIQUE (col1, col2, col3);
1
sapy