我有一个临时变量,其中包含基于 SHA1 hasbyte 的计算列。当我在计算列上创建 UNIQUE 非聚集索引时,它会抛出警告::
Warning! The maximum key length is 900 bytes. The index 'UQ__#B445E45__954B055AC5951B75' has maximum length of 8009 bytes. For some combination of large values, the insert/update operation will fail.
我记得读出的 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组合= Col1+ Col2+ Col3+.. Col15更新该列
并尝试:
CompSum AS HashBytes('SHA1', combine)
这样你使用的字段永远不会大于 750
关于sql - 警告!最大 key 长度为 900 字节。索引的最大长度为 8009 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42145467/