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

Bỏ qua câu lệnh WHERE nếu biến cho câu lệnh đó là null

Đối với trường hợp đơn giản này trong câu hỏi của bạn, chỉ cần sử dụng

IF ( @place IS NULL )
  SELECT *
  FROM   table1
ELSE
  SELECT *
  FROM   table1
  WHERE  country = @place  

Nếu tình huống thực tế của bạn phức tạp hơn, bạn có thể sử dụng

select * 
from Table1 
where @place is null or [email protected] 
option (recompile)

Lý do cần recompile gợi ý là tránh có một gói duy nhất phục vụ cho cả hai trường hợp và thực hiện quét không cần thiết trong trường hợp bạn cung cấp một giá trị rõ ràng.

Chúng và các lựa chọn thay thế khác, chẳng hạn như tạo truy vấn động, được thảo luận chi tiết trong bài viết Tìm kiếm động Các điều kiện trong T-SQL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thể đồng bộ hóa thời gian thực 2 cơ sở dữ liệu SQL Server không

  2. Không thể sử dụng nhà cung cấp OLE DB 'Microsoft.Jet.OLEDB.4.0' cho các truy vấn phân tán

  3. SQL Server:Cơ sở dữ liệu bị kẹt ở trạng thái Khôi phục

  4. Ảnh chụp nhanh cơ sở dữ liệu SQL Server -1

  5. Tôi có thể buộc Linq thành Sql để sử dụng Sql2005Provider không