簡體   English   中英

SELECT WHERE語句中的CASE是否用於存儲過程?

[英]CASE in SELECT WHERE statement for stored procedure?

當傳遞空的ManufacturerID時,我需要根據存儲過程BUT中的ManufacturerID過濾表,我需要所有訂單。

我可以在WHERE語句中執行此操作,這樣就不必在SP中將整個查詢寫兩次嗎?

WHERE
  @param IS NULL OR field = @param

但是請注意,如果您擴大規模以搜索多列,這將變得非常低效。 (請參閱http://www.sommarskog.se/dyn-search.html

低效放大版本的示例...

WHERE
      (@param1 IS NULL OR field1 = @param1)
  AND (@param2 IS NULL OR field2 = @param2)
  AND (@param3 IS NULL OR field3 = @param3)

你可以這樣做:

where t.ManufacturerID = @ManufacturerIDParam OR @ManufacturerIDParam is null

嘗試:

WHERE table.field = coalesce(@param, table.field)

這也可能導致參數嗅探問題。 如果可能的話,可能想先清除null嗎?

暫無
暫無

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

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