Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Istruzione CASE all'interno della clausola WHERE in SQL Server 2008

Innanzitutto, il CASE la dichiarazione deve essere parte dell'espressione, non l'espressione stessa.

In altre parole, puoi avere:

WHERE co.DTEntered = CASE 
                          WHEN LEN('blah') = 0 
                               THEN co.DTEntered 
                          ELSE '2011-01-01' 
                     END 

Ma non funzionerà nel modo in cui li hai scritti, ad esempio:

WHERE 
    CASE LEN('TestPerson')
        WHEN 0 THEN co.personentered  = co.personentered
   ELSE co.personentered LIKE '%TestPerson'
    END 

Potresti avere più fortuna usando istruzioni OR combinate come questa:

WHERE (
        (LEN('TestPerson') = 0 
             AND co.personentered = co.personentered
        ) 
        OR 
        (LEN('TestPerson') <> 0 
             AND co.personentered LIKE '%TestPerson')
      )

Anche se, in entrambi i casi, non sono sicuro di quanto otterrai un piano di query. Questi tipi di imbrogli in un WHERE spesso impedirà a Query Optimizer di utilizzare gli indici.