我有一个基于SHA1 hasbyte的计算列的临时变量。当我在计算列上创建一个UNIQUE非聚簇索引时,它会引发警告::警告!最大密钥长度是900字节。该索引的最大长度为8009字节
警告!最大密钥长度是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'
请告知我在这里失踪。
向我们显示您的计算列? –
@JuanCarlosOropeza我的计算列看起来像:CompSum AS HashBytes('SHA1',Col1 + Col2 + Col3 + .. 15更多栏)。计算列中包含的所有列都是varchar(n),其中n不超过50 – Ramya
是的,但db不知道。你需要包括一个转换,否则他会假设允许最大'n' –