sql >> Database teknologi >  >> RDS >> Sqlserver

CASE-sætning i WHERE-sætning i SQL Server 2008

Først og fremmest CASE erklæringen skal være del af udtrykket, ikke selve udtrykket.

Du kan med andre ord have:

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

Men det vil ikke fungere, som du har skrevet dem, f.eks.:

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

Du har måske bedre held med at bruge kombinerede ELLER-udsagn som denne:

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

Selvom jeg i hvert fald ikke er sikker på, hvor stor en forespørgselsplan du får. Disse typer af skænderier i en WHERE klausul vil ofte forhindre forespørgselsoptimeringsværktøjet i at bruge indekser.



  1. Send en variabel ind i en trigger

  2. SQLite MAX

  3. ACOS() Eksempler i SQL Server

  4. Tilslutning af ODBC-applikationer til MySQL