2010-09-12 6 views
14

Я использую SQL Server 2008.SQL Server 2008 - HashBytes вычисляемый столбец

У меня есть столбец 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

Опубликовать заявление о создании индекса. –

+0

@marc_s Он действительно может «включить» его в список «включенных столбцов». –

+0

@denis: yes, true - это сработает, но он не может сделать столбец в определении индекса как таковой (не включены поля) - вот что я хотел сказать –

ответ

28

колонна 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) 

Теперь это должно работать нормально.

+0

спасибо. отлично выглядит :) – RuSh

+1

Хороший вопрос и хороший ответ. И я научился не бросать на bigint сегодня. –

+2

Большой вопрос. Но мы сгорели в прошлом, потому что раньше мы никогда не уделяли слишком много внимания требованиям SET Option. http://msdn.microsoft.com/en-us/library/ms189292.aspx является официальным документом и уделяет пристальное внимание разделу «Требования к опциям SET», –

Смежные вопросы