Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Câu lệnh CASE trong mệnh đề WHERE trong SQL Server 2008

Trước hết, CASE tuyên bố phải là phần của biểu thức, không phải của chính biểu thức.

Nói cách khác, bạn có thể có:

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

Nhưng nó sẽ không hoạt động theo cách bạn đã viết, ví dụ:

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

Bạn có thể gặp may mắn hơn khi sử dụng các câu lệnh HOẶC kết hợp như thế này:

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

Mặc dù, theo cách nào đó, tôi không chắc bạn sẽ nhận được một kế hoạch truy vấn tuyệt vời như thế nào. Những kiểu tai quái này trong WHERE mệnh đề thường sẽ ngăn trình tối ưu hóa truy vấn sử dụng các chỉ mục.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sẽ tốt hơn nếu thực hiện nhiều lệnh sql với một kết nối hay kết nối lại mọi lúc?

  2. Hội thảo trên web:Theo dõi tiến trình truy vấn trong SQL Server

  3. Cách thay đổi màu và phông chữ trong SQL Server Management Studio (SSMS) - Hướng dẫn SQL Server / TSQL Phần 12

  4. Những điều bạn nên biết với NOCHECK khi kích hoạt ràng buộc CHECK trong SQL Server

  5. Các thay đổi cột chỉ siêu dữ liệu mới trong SQL Server 2016