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.