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

时间:2017-02-09 19:42:45

标签: sql sql-server tsql database-administration

我有一个基于SHA1 hasbyte的计算列的临时变量。当我在计算列上创建UNIQUE非聚簇索引时,它会抛出警告::

  

警告!最大密钥长度为900字节。索引'UQ __#B445E45__954B055AC5951B75'的最大长度为8009字节。对于某些大值组合,插入/更新操作将失败。

我记得读出SHA1字节的放置限制在160字节左右。我无法理解为什么会收到这个警告。

如果通过以下查询检查计算列中涉及的所有列的最大长度,则它总计大约8148个字节。但我认为使用我正在使用的哈希,我应该为计算列获得不超过160个字节。

SELECT Sum(c.max_length)
FROM SYS.COLUMNS C INNER JOIN SYS.TABLES tb ON tb.[object_id] = C.  [object_id]
INNER JOIN SYS.TYPES T ON C.system_type_id = T.user_type_id
WHERE tb.[is_ms_shipped] = 0
and OBJECT_NAME(tb.object_id)='xyz'

请告知我在这里缺少什么。

1 个答案:

答案 0 :(得分:2)

我不是Hash的专家:

但我建议您创建一列combine varchar(750)(15 * 50)

然后使用SET combine = Col1+ Col2+ Col3+.. Col15

更新该列

尝试:

CompSum AS HashBytes('SHA1', combine)

这样你就可以使用永远不会超过750的字段