我正在使用Server 2008。
我有一个名为Title的NVARCHAR(MAX)列,我想为它添加一个唯一的索引。由于列大于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发布于 2010-09-12 20:46:58
哈希字节列被创建为一个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)现在这个应该能正常工作。
https://stackoverflow.com/questions/3696504
复制相似问题