加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

.net – SQL Server 2008 – HashBytes计算列

发布时间:2020-12-12 16:34:43 所属栏目:MsSql教程 来源:网络整理
导读:我正在使用SQL Server 2008. 我有一个名为Title的NVARCHAR(MAX)列,我想添加一个唯一的索引. 因为列大于900bytes,我决定创建一个HashBytes计算列(基于StackOverflow上的推荐). 如何创建HashBytes列? alter table Softs添加TitleHash AS(hashbytes(‘SHA1’,[T
我正在使用SQL Server 2008.

我有一个名为Title的NVARCHAR(MAX)列,我想添加一个唯一的索引.
因为列大于900bytes,我决定创建一个HashBytes计算列(基于StackOverflow上的推荐).

如何创建HashBytes列?

alter table Softs添加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

解决方法

哈希字节列被创建为一个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)

现在这应该是正常的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读