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)

そこでINDEXを設定できます。これがアプローチに役立つかもしれません。

于 2013-04-16T05:00:48.870 に答える