使用多个值进行条件索引

时间:2015-10-02 12:32:12

标签: sql sql-server-2008

CREATE UNIQUE NONCLUSTERED INDEX [erm_UXAGC_WORKINGDRAWINGID] 
ON [dbo].[INVENTTABLE] ([AGC_WORKINGDRAWINGID] ASC)
WHERE ([AGC_WORKINGDRAWINGID] NOT IN ('', 'UR-GE'))

这种条件索引是否可行?从文档中,它说sql不支持OR语法,你必须使用IN,但是我无法使这个配置工作,我得到语法错误:

  

Msg 102,Level 15,State 1,Line 9
  'NOT'附近的语法不正确。

1 个答案:

答案 0 :(得分:1)

在创建过滤索引时,似乎有一些混淆,因为官方文档对此并不十分清楚。

例如,以下错误报告:Filtered index creation failed with NOT IN clause。有趣的部分是MSFT的回应:

  

您好,   感谢您对Filtered Indexes功能的反馈。在SQL Server 2008中,筛选的索引仅支持一组有限的简单where子句。支持的过滤谓词的确切语法列在BOL中。由于优化器匹配此类子句的困难,我们目前不支持NOT IN子句。如您所知,IN子句得到支持。我们将继续评估受支持的谓词集,并在将来的版本中对其进行增强。

以上评论是关于SQL Server 2008编写的。但是,据我所知,最新版本的SQL Server仍然适用。

编辑:解决方法

相同的错误报告包含您可以使用的解决方法:

WHERE [AGC_WORKINGDRAWINGID] <> '' AND [AGC_WORKINGDRAWINGID] <> 'UR-GE'