2

这是自学问题,不在现场环境中。

我一直在查询以 A 结尾的名称,所以我想我会在这些数据上创建一个过滤索引,所以它会寻找或扫描。

但这给了我错误。

--Usual Query 
SELECT c.contactname
FROM sales.Customers c where c.contactname like '%A'

--1st Tried failed
create NONCLUSTERED INDEX UCI_NameLikeA
on sales.customers(contactname)
where right(contactname,1)='A'

Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'LIKE'

--2nd method tried failed
create NONCLUSTERED INDEX UCI_NameLikeA
on sales.customers(contactname)
where right(contactname,1)='A'

Msg 10735, Level 15, State 1, Line 3
Incorrect WHERE clause for filtered index 'UCI_NameLikeA' on table 'sales.customers'.

为什么过滤器索引中不允许使用 Like 和 RIGHT 函数?我可以用其他方法来寻找而不是扫描吗?

4

1 回答 1

0

关于手册http://msdn.microsoft.com/de-de/library/ms188783.aspx只有简单的运算符允许过滤索引。

所以你可以选择非计算列和喜欢= < >IN()

编辑:

你可以做什么。创建另一个存储第一个字母的列。然后创建一个更新此列的索引,如下所示:

UPDATE [mytable]
SET [index_column] = RIGHT(contactname,1)

在那里你可以设置你的索引,这可能对你的方法有帮助。

于 2013-04-16T05:00:48.870 回答