繁体   English   中英

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

[英]Warning! The maximum key length is 900 bytes. The index has maximum length of 8009 bytes

我有一个带有基于 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'

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

我不是哈希专家:

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

然后使用SET combine = Col1+ Col2+ Col3+.. Col15更新该列

并尝试:

CompSum AS HashBytes('SHA1', combine)

这样你就使用了一个永远不会大于 750 的字段

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM