我有一個SQL Server存儲過程,它根據一組條件參數過濾一組數據。SQL Server:在where子句中使用AND或OR基於條件
@Parameter1 int = null,
@Parameter2 int = null,
@Parameter3 int = null,
@Parameter4 int = null,
@Parameter5 int = null,
@UseOR bit = False
Select *
From Table
Where
(@Parameter1 Is Null Or Column1 = @Parameter1) And
(@Parameter2 Is Null Or Column2 = @Parameter2) And
(@Parameter3 Is Null Or Column3 = @Parameter3) And
(@Parameter4 Is Null Or Column4 = @Parameter4) And
(@Parameter5 Is Null Or Column5 = @Parameter5)
但是,對於某些用戶來說,需要將兩個列(Column3和Column4)與OR連接而不是AND。
這就是@UseOR
參數進來所以只對某些用戶(這將在應用程序代碼中所定義的),該查詢應具有OR柱3和4之間,例如:
Select *
From Table
Where
(@Parameter1 Is Null Or Column1 = @Parameter1) And
(@Parameter2 Is Null Or Column2 = @Parameter2) And
(@Parameter3 Is Null Or Column3 = @Parameter3) OR
(@Parameter4 Is Null Or Column4 = @Parameter4) And
(@Parameter5 Is Null Or Column5 = @Parameter5)
對於其他人來說,它會像原文一樣。我不確定是否有可能根據@UseOR
是否爲true來將AND
更改爲OR
。在我看來,很高興能有這樣的事情:
Select *
From Table
Where
(@Parameter1 Is Null Or Column1 = @Parameter1) And
(@Parameter2 Is Null Or Column2 = @Parameter2) And
(@Parameter3 Is Null Or Column3 = @Parameter3) IIF(@UseOR = True, OR, AND)
(@Parameter4 Is Null Or Column4 = @Parameter4) And
(@Parameter5 Is Null Or Column5 = @Parameter5)
但顯然這是行不通的。有沒有辦法做這樣的事情,還是我完全錯誤地思考它?
我覺得做複雜的斷言這裏可能是與直覺相反:大約有兩個不同的程序和調用一個或其他根據條件是什麼? – fedorqui
在你的程序邏輯中處理,而不是在SQL中。有多個查詢沒有任何問題。或者你可以在你的邏輯中建立查詢。 –
你知道OR會被最後使用 – Paparazzi