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

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

我有一个临时变量,其中包含一个基于 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 combine = Col1+ Col2+ Col3+.. Col15

更新该列

然后尝试:

CompSum AS HashBytes('SHA1', combine)

这样你使用的字段永远不会大于 750