首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2008 - HashBytes计算列

Server 2008 - HashBytes计算列
EN

Stack Overflow用户
提问于 2010-09-12 20:34:01
回答 1查看 10.7K关注 0票数 18

我正在使用Server 2008。

我有一个名为Title的NVARCHAR(MAX)列,我想为它添加一个唯一的索引。由于列大于900个字节,所以我决定创建一个HashBytes计算列(基于StackOverflow上的推荐)。

如何创建HashBytes列?

alter table Softs add TitleHash AS (hashbytes('SHA1',[Title])) PERSISTED;

此操作正常,并创建了计算列。

,但当尝试添加索引时,我会得到以下错误

代码语言:javascript
复制
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?

这是用于创建索引的查询:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-12 20:46:58

哈希字节列被创建为一个VARBINARY(MAX),除非您具体告诉它20个字节是足够的:

代码语言:javascript
复制
alter table dbo.Softs 
  add TitleHash AS CAST(hashbytes('SHA1', [Title]) AS VARBINARY(20)) PERSISTED

这样做之后,就可以在该列上创建索引(唯一的或非唯一的):

代码语言:javascript
复制
CREATE UNIQUE NONCLUSTERED INDEX [UIX_TitleHash] 
  ON [dbo].[Softs]([TitleHash] ASC)

现在这个应该能正常工作。

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3696504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档