Primeiro, o
CASE
declaração deve ser parte da expressão, não a expressão em si. Em outras palavras, você pode ter:
WHERE co.DTEntered = CASE
WHEN LEN('blah') = 0
THEN co.DTEntered
ELSE '2011-01-01'
END
Mas não funcionará da maneira que você os escreveu, por exemplo:
WHERE
CASE LEN('TestPerson')
WHEN 0 THEN co.personentered = co.personentered
ELSE co.personentered LIKE '%TestPerson'
END
Você pode ter mais sorte usando instruções OR combinadas como esta:
WHERE (
(LEN('TestPerson') = 0
AND co.personentered = co.personentered
)
OR
(LEN('TestPerson') <> 0
AND co.personentered LIKE '%TestPerson')
)
Embora, de qualquer forma, eu não tenha certeza de quão bom será um plano de consulta. Esses tipos de travessuras em um
WHERE
A cláusula geralmente impedirá que o otimizador de consulta utilize índices.