【发布时间】:2011-04-11 10:09:38
【问题描述】:
我使用的是 SQL Server 2008。
我有一个名为 Title 的 NVARCHAR(MAX) 列,我想为它添加一个唯一索引。 因为该列大于 900bytes ,所以我决定创建一个 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
【问题讨论】:
-
发布索引创建语句。
-
@marc_s 他实际上可以在
included columns列表中include它。 -
@denis: 是的,是的 - 这会起作用 - 但他不能将其作为索引定义本身的列(不是包含的字段) - 这就是我的意思
-
将创建索引查询添加到问题中。我正在尝试在 TitleHash 列上创建索引。
-
我猜 hashbytes 语句会生成 varbinary(max) 数据类型,所以你需要将结果转换为 varbinary(20) for sha1。
标签: .net sql sql-server sql-server-2008