由于ANSI_Padding,创建索引失败

时间:2016-03-17 16:54:42

标签: sql-server indexing

当我尝试在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设置OffANSI padding for columns in this table

1 个答案:

答案 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