我正在尝试开发一个独特的索引。
CREATE UNIQUE NONCLUSTERED INDEX NCI_NewUnique
ON [NewUnique]([U1])
WHERE (ISNULL([MyField], '') = '')
我的错误是
Incorrect WHERE clause for filtered index 'NCI_NewUnique' on table 'NewUnique'.
这是另一种尝试;这个我删除了ISNULL(MyField,'')部分。为什么这个人不能有OR
?
CREATE UNIQUE NONCLUSTERED INDEX NCI_NewUnique
ON [NewUnique]([U1])
WHERE (
([MyId] IS NULL)
OR
([MyId] IS NOT NULL AND [MyField] IS NOT NULL)
)
错误是:
Incorrect syntax near the keyword 'OR'.
答案 0 :(得分:3)
我不知道原因,但根据documentation函数和or
是不允许的。
<filter_predicate> ::=
<conjunct> [ AND <conjunct> ]
<conjunct> ::=
<disjunct> | <comparison>
<disjunct> ::=
column_name IN (constant ,...n)
<comparison> ::=
column_name <comparison_op> constant
<comparison_op> ::=
{ IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< }
答案 1 :(得分:0)
我发现此问题面临一个问题我如何在过滤器表达式中使用ISNULL或OR制作过滤后的唯一索引。因此,尽管“不允许”是一个有效的答案,但这对我的情况没有帮助。
我确实找到了问题的答案,所以这里是给任何想要像我一样找到它的人的。
您可以创建带有模式绑定的视图,将复杂的过滤器放入其中,并为该视图创建唯一的聚簇索引!这是一种技巧,但是它可以工作,并且优化器甚至可以在查询表时选择该索引。
更多详细信息在这里: