我有一个基于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'
请告知我在这里缺少什么。
答案 0 :(得分:2)
我不是Hash的专家:
但我建议您创建一列combine varchar(750)
(15 * 50)
然后使用SET combine = Col1+ Col2+ Col3+.. Col15
尝试:
CompSum AS HashBytes('SHA1', combine)
这样你就可以使用永远不会超过750的字段