Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pernyataan CASE dalam klausa WHERE di SQL Server 2008

Pertama, CASE pernyataan harus bagian ekspresi, bukan ekspresi itu sendiri.

Dengan kata lain, Anda dapat memiliki:

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

Tapi itu tidak akan berfungsi seperti yang Anda tulis, misalnya:

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

Anda mungkin lebih beruntung menggunakan pernyataan OR gabungan seperti ini:

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

Meskipun demikian, saya tidak yakin seberapa hebat rencana kueri yang akan Anda dapatkan. Jenis kejahatan ini dalam WHERE klausa akan sering mencegah pengoptimal kueri menggunakan indeks.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memperbarui Kolom Identitas di SQL Server?

  2. ADO.net SqlTransaction meningkatkan kinerja

  3. PILIH kueri dengan kondisi CASE dan SUM()

  4. Perbarui catatan dalam tabel dari CTE

  5. Cara Membuat Riwayat ATAU Tampilan Audit dari Tabel Change Data Capture (CDC) di SQL Server - Tutorial SQL Server