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

Sql server 警告最大密钥长度为900字节。索引的最大长度为1000字节,sql-server,key,Sql Server,Key,我将db脚本从64位系统传输到32位系统。当我执行脚本时,会出现以下错误: 警告!最大密钥长度为900字节。索引 “UQ__用户__7E800015145C0A3F”的最大长度为1000字节。对于 如果某个大值的组合,则插入/更新操作将 失败 Google结果和堆栈溢出问题无助于解决此问题。varchar类型的存储长度将为+2 解决方案 ALTER TABLE table_name ALTER COLUMN column_name varchar(255) 因此,尝试将列长度减少到255个字符

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

警告!最大密钥长度为900字节。索引 “UQ__用户__7E800015145C0A3F”的最大长度为1000字节。对于 如果某个大值的组合,则插入/更新操作将 失败


Google结果和堆栈溢出问题无助于解决此问题。

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

解决方案

ALTER TABLE table_name
ALTER COLUMN column_name varchar(255)
因此,尝试将列长度减少到255个字符,并尝试索引

对于大小较大的索引列,仅sqlserver索引 大小不超过900字节的列

要解决这个问题,

首先:我添加了一列hashCol来为mycl生成SHA1类型的hashcode

alter table myTable
    add 
    hashCol AS HASHBYTES('SHA1', CONVERT(VARCHAR(90), MyCol))
第二:我为hashCol添加了一个惟一的约束来惟一地标识mycl

 ALTER  TABLE  myTable
     ADD CONSTRAINT hashCol_Unique UNIQUE (hashCol)
通过这种方式,我克服了索引大尺寸列的问题

参考资料


在sql server中,所有列的组合长度应小于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);

--减少组合列长度(要索引/添加约束)请指定您使用的DBMS?sql express server 10.50.2500可能的重复项我通过将
NVARCHAR(512)
更改为
NVARCHAR(450)
,解决了这一问题,因为在我的情况下,2*SIZE=2*450=900字节。但是,它仅受到限制,因为我为该字段提供了
UNIQUE
。。或者,如果您能够在不截断字段数据的情况下将其缩减为varchar(900)。出现错误“表“MyTable”中的列“HashCol”不能用于索引或统计信息,也不能用作分区键,因为它是非确定性的。”。如何修复它?