簡體   English   中英

如何使用可選搜索參數進行查詢?

[英]How to Do a Query with Optional Search Parameters?

我的桌子上有這些欄;

Categ - int
WorkPlace - int
WorkPlace1 - int
AsignedAs - int

我正在使用C#

  1. 如果僅搜索參數之一不等於0,我想用OR選擇所有行。我添加了一個默認值,以了解用戶是否從組合框中進行選擇。

  2. 我想按此順序與AND進行選擇:如果多個搜索參數不等於0(用戶選擇值),則像這樣

     WHERE Categ = @categ AND WorkPlace = @WorkPlace (user select two values 

    其他為空或等於0

  3. 要么

     WHERE WorkPlace = @WorkPlace AND WorkPlace1 = @WorkPlace1 
  4. 要么

     WHERE Categ = @Categ AND WorkPlace = @WorkPlace1 

(用戶選擇這些值,並且不為空,因此我們在查詢中添加and

等等....

所以我想檢查值是否為空或不建立正確的查詢。

請參閱Goran指出的用於處理可選值的鏈接-在這種情況下,如果用戶未選擇該選項,則需要將NULL傳遞給存儲的proc。 如果您希望繼續使用零(或其他某個值)來指示參數的不適用性,那么您可以修改查詢,例如

WHERE 
   (COALESCE(@Categ, 0) = 0 OR Categ = @Categ) AND 
   (COALESCE(@WorkPlace, 0) = 0 OR WorkPlace = @WorkPlace) AND 
   (COALESCE(@WorkPlace1, 0) = 0 OR WorkPlace1 = @WorkPlace1) AND 
   (COALESCE(@AsignedAs, 0) = 0 OR AsignedAs= @AsignedAs) 

希望您有大致的想法!

您也可以使用CASE方法。 我發現這非常有用且容易,並且SQL Query Optimizer似乎針對這種情況選擇了更好的執行計划:

WHERE CASE WHEN @Categ = 0 THEN 0 ELSE Categ END = CASE WHEN @Categ = 0 THEN 0 ELSE @Categ END
AND CASE WHEN @WorkPlace = 0 THEN 0 ELSE WorkPlace END = CASE WHEN @WorkPlace = 0 THEN 0 ELSE @WorkPlace END
AND CASE WHEN @WorkPlace1 = 0 THEN 0 ELSE WorkPlace1 END = CASE WHEN @WorkPlace1 = 0 THEN 0 ELSE @WorkPlace1 END
AND CASE WHEN @AsignedAs = 0 THEN 0 ELSE AsignedAs END = CASE WHEN @AsignedAs = 0 THEN 0 ELSE @AsignedAs END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM