Zuerst einmal der CASE
Anweisung muss Teil sein des Ausdrucks, nicht der Ausdruck selbst.
Mit anderen Worten, Sie können Folgendes haben:
WHERE co.DTEntered = CASE
WHEN LEN('blah') = 0
THEN co.DTEntered
ELSE '2011-01-01'
END
Aber es wird nicht so funktionieren, wie Sie es geschrieben haben, zB:
WHERE
CASE LEN('TestPerson')
WHEN 0 THEN co.personentered = co.personentered
ELSE co.personentered LIKE '%TestPerson'
END
Möglicherweise haben Sie mehr Glück, wenn Sie kombinierte ODER-Anweisungen wie diese verwenden:
WHERE (
(LEN('TestPerson') = 0
AND co.personentered = co.personentered
)
OR
(LEN('TestPerson') <> 0
AND co.personentered LIKE '%TestPerson')
)
Allerdings bin ich mir nicht sicher, wie groß der Abfrageplan ist, den Sie bekommen werden. Diese Art von Spielereien in einem WHERE
-Klausel verhindert häufig, dass der Abfrageoptimierer Indizes verwendet.