2012-04-24 24 views
7

我的問題是我可以在單個語句中執行這兩個選擇的功能並擺脫IF嗎?TSQL:如何在單個select中使用可能爲null或int的變量

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 

回答

10

怎麼回合此:

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

如果@recIDnull,第一部分永遠不會是真實的,但第二部分將是,如果[myIDcolumn]null,覆蓋null情況。如果@recID不是null,則第一部分將在適當時匹配(並且第二部分將被忽略)。所以這兩種情況都被覆蓋了

+0

不要忘記把所有東西都放在圓括號裏,如果你在你的地方連結AND。 (...)WHERE myIDcolumn2 = TRUE AND([myIDcolumn] = @recID或(@recID爲空,[myIDcolumn]爲空))' – Ullullu 2017-03-01 16:19:28

2

您可以表達情況有點不同:

  • 要麼都有@recID[myIDcolumn]必須null,或
  • [myIDcolumn]必須等於@recID

    SELECT * 從myTable的 WHERE ([myIDcolumn]爲空,@recID爲空)或[myIDcolumn] = @recID

相關問題