警告!最大密钥长度为900字节。索引的最大长度为1000个字节

时间:2014-03-04 12:41:06

标签: sql-server key

我将db脚本从64位系统传输到32位系统。当我执行脚本时,它给出了以下错误,

  

警告!最大密钥长度为900字节。该指数   'UQ__Users__7E800015145C0A3F'的最大长度为1000字节。对于   某些大值组合,插入/更新操作会   失败。

Google搜索结果和Stack Overflow问题无法解决此问题。

4 个答案:

答案 0 :(得分:11)

  

对于索引具有Large size的列,仅限sqlserver索引   大小最多为900字节的列。

解决这个问题

首先:我添加了一个列hashCol来为MyCol生成类型SHA1的哈希码

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

其次:我为hashCol添加了一个唯一的约束来唯一识别MyCol

 ALTER  TABLE  myTable
     ADD CONSTRAINT hashCol_Unique UNIQUE (hashCol)

通过这种方式,我克服了索引具有大尺寸

的列的问题

参考

Generate Unique hash for a field in SQL Server in-sql-server

答案 1 :(得分:3)

您似乎正在运行Microsoft SQL Server。有关此主题的更多信息,请查看Microsoft: Maximum Size of Index Keys。或者相关答案:900 byte index size limit in character length

答案 2 :(得分:3)

varchar类型的存储长度为+2。

<强>解决方案

ALTER TABLE table_name
ALTER COLUMN column_name varchar(255)

所以尝试将列长度减少到255个字符并尝试编制索引。

答案 3 :(得分:0)

所有列的总长度应小于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);