Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Instruction CASE dans la clause WHERE dans SQL Server 2008

Tout d'abord, le CASE la déclaration doit être partie de l'expression, pas l'expression elle-même.

En d'autres termes, vous pouvez avoir :

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

Mais cela ne fonctionnera pas comme vous les avez écrits, par exemple :

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

Vous aurez peut-être plus de chance en utilisant des instructions OR combinées comme celle-ci :

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

Bien que, de toute façon, je ne suis pas sûr de la qualité d'un plan de requête que vous obtiendrez. Ces types de manigances dans un WHERE empêchera souvent l'optimiseur de requête d'utiliser les index.