Dot-Net
SQL Server 2008 - HashBytes 計算列
我正在使用 SQL Server 2008。
我有一個名為 Title 的 NVARCHAR(MAX) 列,我想為它添加一個唯一索引。因為該列大於 900bytes ,所以我決定創建一個 HashBytes 計算列(基於 StackOverflow 上的建議)。
如何創建 HashBytes 列?
alter table Softs add TitleHash AS (hashbytes('SHA1',[Title])) PERSISTED;這有效並創建了計算列。
但是在嘗試添加索引時出現以下錯誤:
Adding the selected columns will result in an index key with a maximum length of 8000 bytes. The maximum permissible index length is 900 bytes. INSERT and UPDATE operations fail if the combined value of the key columns exceeds 900 bytes. Do you want to continue?這是用於創建索引的查詢:
CREATE NONCLUSTERED INDEX [UIX_TitleHash] ON [dbo].[Softs] ( [TitleHash] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO
hashbytes 列被創建為 a
VARBINARY(MAX),除非您明確告訴它 20 個字節就足夠了:alter table dbo.Softs add TitleHash AS CAST(hashbytes('SHA1', [Title]) AS VARBINARY(20)) PERSISTED完成此操作後,您可以在該列上創建索引(唯一或不唯一):
CREATE UNIQUE NONCLUSTERED INDEX [UIX_TitleHash] ON [dbo].[Softs]([TitleHash] ASC)現在這應該工作得很好。