2011-10-06 57 views
1

我有一個表,其中我想放置一個篩選索引的dateTime列。該指數將每週重建。每次重建時,我都希望它包含兩天前和更新的行,並基於此列。我可以創建這樣的過濾索引嗎?我嘗試了各種方法,並且出現語法錯誤。SQL Server - 創建篩選索引

例如,以下凡在創建索引條款沒有工作:

WHERE (ReadTime > DateAdd(dd,-2,GetDate())) 

回答

5

您不能直接引用getdate()做到這一點。您需要動態SQL。

CREATE INDEX語法只允許對常數進行比較。

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON <object> (column [ ASC | DESC ] [ ,...n ]) 
    [ INCLUDE (column_name [ ,...n ]) ] 
    [ WHERE <filter_predicate> ] 
    ... /*Irrelevant grammar removed*/ 

<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 | = | <> | != | > | >= | !> | < | <= | !< }