SQL Server 2008 - вычисляемый столбец HashBytes - PullRequest
17 голосов
/ 13 сентября 2010

Я использую 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 Ответ

33 голосов
/ 13 сентября 2010

Столбец хеш-байтов создается как 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)

Теперь это должно работать просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...