我将db脚本从64位系统传输到32位系统。当我执行脚本时,它给出了以下错误,
警告!最大密钥长度为900字节。该指数 'UQ__Users__7E800015145C0A3F'的最大长度为1000字节。对于 某些大值组合,插入/更新操作会 失败。
Google搜索结果和Stack Overflow问题无法解决此问题。
答案 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);