SQL Server 筛选索引 WHERE 列 = 列

mhe*_*all 2 sql-server filtered-index sql-server-2012

我希望尝试在表上使用过滤索引SQL Server 2012以查看它是否会改善查询执行,但在尝试创建它时我收到以下错误:

消息 10735,级别 15,状态 1,第 3 行
表 'dbo.SRReferralIn' 上过滤索引 'IX_SRReferralIn_Filtered' 的 WHERE 子句不正确。

下面是我正在使用的语句。RowIdentifier并且IDOrganisationVisibleTo是在列CLUSTERED PRIMARY KEY

CREATE NONCLUSTERED INDEX IX_SRReferralIn_Filtered
ON dbo.SRReferralIn(RowIdentifier, IDOrganisationVisibleTo)
WHERE IDOrganisationVisibleTo = IDOrganisation;
Run Code Online (Sandbox Code Playgroud)

是否WHERE不支持子句中的表达式?

Mar*_*ith 5

不,这是不支持的

语法只允许与常量进行比较

<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 | = | <> | != | > | >= | !> | < | <= | !< }
Run Code Online (Sandbox Code Playgroud)

不过,您可以使用此条件创建索引视图。