2012-04-13 1 views
1

Ich versuche, einen eindeutigen Index zu entwickeln.Erstellen Sie einen eindeutigen Index mit Filterausdruck mit IS NULL oder OR

CREATE UNIQUE NONCLUSTERED INDEX NCI_NewUnique 
ON [NewUnique]([U1]) 
WHERE (ISNULL([MyField], '') = '') 

Mein Fehler ist

Incorrect WHERE clause for filtered index 'NCI_NewUnique' on table 'NewUnique'. 

Hier ist ein weiterer Versuch ist; Diesen habe ich den ISNULL (MyField, '') Teil entfernt. Warum kann dieser keine OR haben?

CREATE UNIQUE NONCLUSTERED INDEX NCI_NewUnique 
ON [NewUnique]([U1]) 
WHERE (
     ([MyId] IS NULL) 
     OR 
     ([MyId] IS NOT NULL AND [MyField] IS NOT NULL) 
    ) 

Fehler ist:

Incorrect syntax near the keyword 'OR'. 

Antwort

3

Ich weiß nicht, warum, aber nach den documentation Funktionen und or ist nicht erlaubt.

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