sql >> Base de Datos >  >> RDS >> Sqlserver

Declaración CASE dentro de la cláusula WHERE en SQL Server 2008

En primer lugar, el CASE declaración debe ser parte de la expresión, no la expresión en sí.

En otras palabras, puedes tener:

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

Pero no funcionará de la forma en que los ha escrito, por ejemplo:

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

Es posible que tenga más suerte si utiliza sentencias OR combinadas como esta:

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

Aunque, de cualquier manera, no estoy seguro de qué tan bueno será el plan de consulta que obtendrá. Este tipo de travesuras en un WHERE La cláusula a menudo evitará que el optimizador de consultas utilice índices.