2012-04-24 25 views
7

Câu hỏi của tôi là tôi có thể thực hiện các chức năng của hai lựa chọn này trong một câu lệnh đơn và loại bỏ IF không?TSQL: Cách sử dụng biến có thể là null hoặc int trong một lựa chọn duy nhất

DECLARE @recID INT; 

--Case 1 
SET @recID = null; 
--Case 2 
--SET @recID = 117; 

IF @recID is null 
BEGIN 
    select * from myTable WHERE [myIDcolumn] is null -- works when recID is null 
END 
ELSE 
BEGIN 
    select * from myTable WHERE [myIDcolumn] = @recID -- works when recID is number 
END 

Trả lời

10

Làm thế nào 'bout này:

select * 
from myTable 
WHERE [myIDcolumn] = @recID or (@recID is null and [myIDcolumn] is null) 

Nếu @recIDnull, phần đầu tiên sẽ không bao giờ là sự thật nhưng phần thứ hai sẽ được nếu [myIDcolumn]null, trong đó bao gồm các trường hợp null. Nếu @recID không phải là null, phần đầu tiên sẽ khớp khi thích hợp (và phần thứ hai sẽ bị bỏ qua). Vì vậy, cả hai trường hợp đều được bảo hiểm.

+0

Đừng quên bọc tất cả mọi thứ trong dấu ngoặc đơn nếu bạn đang chuỗi AND vào WHERE của bạn. '(...) WHERE myIDcolumn2 = TRUE AND ([myIDcolumn] = @recID hoặc (@recID là null và [myIDcolumn] là null))' – Ullullu

2

Bạn có thể diễn tả tình trạng một chút khác nhau:

  • Hoặc cả hai @recID[myIDcolumn] phải null, hoặc
  • [myIDcolumn] phải bằng @recID

    chọn * từ myTable Ở ĐÂU ([myIDcolumn] là null AND @recID is null) HOẶC [myIDcolumn] = @recID

Các vấn đề liên quan