我有一個基於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' –