当我尝试在SQL Server 2008 R2中创建索引时,出现以下错误。
CREATE INDEX失败,因为以下SET选项的设置不正确:'ANSI_PADDING'
索引脚本是
CREATE UNIQUE NONCLUSTERED INDEX [IX_TabPermission_Roles] ON [dbo].
[TabPermission]
(
[RoleID] ASC,
[TabID] ASC,
[PermissionID] ASC
)
INCLUDE ( [AllowAccess])
WHERE ([RoleID] IS NOT NULL)
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
Table definition is here。在表定义中,您可以发现没有包含char,varchar,binary或varbinary的列。
如果我使用SET ANSI_PADDING On
运行索引创建脚本,则可以正常运行。我的问题是为什么我需要设置这个On
,在表定义中,我没有任何包含char,varchar,binary或varbinary的列。您还可以发现此表中的所有这些列都具有Ansi_padding设置Off
。
ANSI padding for columns in this table
答案 0 :(得分:7)
过滤的索引需要ANSI PADDING ON。
https://msdn.microsoft.com/en-us/library/ms188783(v=sql.105).aspx
过滤索引的必需SET选项
只要出现以下任何一种情况,就需要“必需值”列中的SET选项:
- 创建过滤索引。
- INSERT,UPDATE,DELETE或MERGE操作修改过滤索引中的数据。
- 查询优化器在查询执行计划中使用筛选的索引。
SET选项必需值
ANSI_NULLS ON
ANSI_PADDING ON
ANSI_WARNINGS * ON
ARITHABORT ON
CONCAT_NULL_YIELDS_NULL ON
NUMERIC_ROUNDABORT OFF
QUOTED_IDENTIFIER ON