我想在(Column1 = Column2)条件上创建一个过滤索引:
CREATE NONCLUSTERED INDEX [IX_Document_IsBalanced]
ON [ACC].[Document] ([DocumentID] ASC)
WHERE SumCredit = SumDebit
ON [PRIMARY]
GO
错误消息是:
关键字'with'
附近的语法不正确
答案 0 :(得分:7)
文档在这个问题上非常混乱,但你无法真正创建在这种条件下过滤的索引(因为它不能用于过滤统计信息)。
文档说:
过滤谓词使用简单的比较逻辑
没有明确定义“简单”,但实际上“简单”意味着“可用于过滤的统计数据”。两者有相同的局限性。
统计数据只能使用等式,范围和列表中的常量。这意味着您只能使用以下谓词:
column = const
column > const
column < const
column IN (const1, const1)
及其变体(BETWEEN
等),可能与AND
(甚至不是OR
)相结合。
答案 1 :(得分:-5)
过滤的索引是SQL Server 2012的功能 - 这里是来自MSDN的documentation语法
例如:
CREATE NONCLUSTERED INDEX FIBillOfMaterialsWithEndDate
ON Production.BillOfMaterials (ComponentID, StartDate)
WHERE EndDate IS NOT NULL ;
GO