SQL Server 2008 - расчетный столбец HashBytes
Я использую SQL Server 2008.
У меня есть столбец NVARCHAR (MAX) с названием Title, и я хочу добавить для него уникальный индекс.
Поскольку столбец больше 900 байт, я решил создать вычисляемый столбец 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
Ответы
Ответ 1
Столбец hashbytes создается как 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)
Теперь это должно работать нормально.