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

Sho*_*ide 26 sql-server key

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

警告!最大密钥长度为900字节.索引'UQ__Users__7E800015145C0A3F'的最大长度为1000字节.对于某些大值组合,插入/更新操作将失败.

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

Els*_*yed 12

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

解决这个问题

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

alter table myTable
    add 
    hashCol AS HASHBYTES('SHA1', CONVERT(VARCHAR(90), MyCol))
Run Code Online (Sandbox Code Playgroud)

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

 ALTER  TABLE  myTable
     ADD CONSTRAINT hashCol_Unique UNIQUE (hashCol)
Run Code Online (Sandbox Code Playgroud)

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

引用

为SQL Server in-sql-server中的字段生成唯一哈希


小智 4

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

解决方案

ALTER TABLE table_name
ALTER COLUMN column_name varchar(255)
Run Code Online (Sandbox Code Playgroud)

因此尝试将列长度减少到 255 个字符并尝试建立索引。