2012-07-22 118 views
0

我該如何編寫一個SQL存儲過程,我希望參數在select語句中是可選的?如何使用SQL存儲過程編寫過濾的查詢?

+0

** **什麼數據庫系統,以及哪個版本? * SQL *只是*結構化查詢語言* - 許多數據庫系統使用的語言,但不是數據庫產品......有關存儲過程等功能的細節通常是供應商特定的 - 所以我們真的需要知道什麼**數據庫系統**你正在使用.... – 2012-07-22 19:53:02

回答

4

試試這個。讓SPs輸入參數控制過濾可選,默認值爲null。在每個SELECT語句的WHERE子句,寫這樣的謂詞:

Create procedure MyProcedure 
    @columnNameValue [datatype] = null 
    As 

     Select [stuff....] 
     From table 
     Where ColumnName = Coalesce(@columnNameValue , ColumnName) 

這樣,如果你不包括參數,或者如果你傳遞一個空值的參數,select語句將過濾的其中列值等於其本身(在該列上實際上根本不做任何濾波)

唯一的負面因素是它阻止您能夠將null作爲有意義的值傳遞給顯式僅過濾空值....(即,只選擇值爲空的行)一旦採用上述技術,您將需要添加另一個參數來實現該類型的需求。 (比如說,@GetOnlyNulls TINYINT = 0,或類似的東西)

Create procedure MyProcedure 
    @columnNameValue [datatype] = null, 
    @GetOnlyNulls Tinyint = 0 
    As 

     Select [stuff....] 
     From table 
     Where (ColumnName Is Null And @GetOnlyNulls = 1) 
      Or ColumnName = Coalesce(@columnNameValue , ColumnName) 
+0

我喜歡這個。從來沒有想過這樣做。 +1 – CodeLikeBeaker 2012-07-22 19:04:17