Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Инструкция CASE в клаузата WHERE в SQL Server 2008

Първо, CASE изявлението трябва да е част на израза, а не на самия израз.

С други думи, можете да имате:

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

Но няма да работи по начина, по който сте ги написали, например:

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

Може да имате по-голям късмет, като използвате комбинирани изрази ИЛИ като това:

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

Въпреки че, така или иначе, не съм сигурен колко страхотен план за заявки ще получите. Тези видове шеги в WHERE клаузата често ще попречи на оптимизатора на заявки да използва индекси.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как може LEFT OUTER JOIN да върне повече записи, отколкото съществуват в лявата таблица?

  2. Въведение в функциите с таблично стойности с множество оператори (MSTVF) в SQL Server

  3. Минали ли са първичните ключове?

  4. Как да разделите низ в SQL Server

  5. Профилиране на заявка 101 — Да, наистина може да подобри производителността на вашия SQL сървър