2016-03-04 44 views
0

我想在兩種情況下過濾SQL Server中的記錄。我正在爲此寫一個存儲過程。如何在SQL Server中篩選器值爲NULL時篩選條件上的記錄?

這是我的查詢

// Parameters 
@carNo AS INT 
@carEngineNo AS INT = null // this is optional 

Select * 
From CarLog 
//Some Joins 
Where 
    CarLog.car_no = carNo 
    // here I want condition, I tried this but there is some syntax error 
    And CASE 
      When @carEngineNo IS NOT NULL THEN CarLog.engine_no= carEngineNo 
      WHEN @carEngineNo IS NULL THEN CarLog.engine_no = CarLog.engine_no 
      END 

我怎樣才能做到這一點?

+1

'//這裏我想要條件,我這樣做,但有一些語法錯誤'什麼是語法錯誤。同時顯示拋出錯誤的查詢。 –

回答

2

很簡單OR

... 
AND (@carEngineNo is NULL or CarLog.engine_no = @carEngineNo) 

想到追加option(recompile)到您的查詢,因爲實際的參數設置可能會有所不同的。


case固定:

AND CarLog.engine_no = 
     CASE 
     When @carEngineNo IS NOT NULL THEN @carEngineNo 
     WHEN @carEngineNo IS NULL THEN CarLog.engine_no 
     END 

備用:在關鍵字

AND CarLog.engine_no = IsNull(@carEngineNo, CarLog.engine_no) 
+0

謝謝你。有用。 – CodeLover

0

使用,

isnull(@carEngineNo,-1) in (-1, CarLog.engine_no) 

如果@carEngineNo爲null,則它得到的 - 1或否則我們得到那個。