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'附近的语法不正确。
答案 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'