轉帖:http://www.cnblogs.com/oceanshare/archive/2010/02/09/1666370.html
我們在開發過程中,特別是數據庫系統的開發中經常會遇到多條件的查詢狀況。例如:查詢某一個部門某個時間段的車輛費用支出,這就涉及到多條件查詢。其實多條件查詢的方法有很多種,有些寫法是比較煩瑣,效率也不高,比如一個條件一個條件去if—else判斷拼湊sql語句。我在這裏使用一種個人覺得寫法簡單,理解也比較簡單的方法:
CREATE PROCEDURE [dbo].[usp_GetFeeInfo]
@Number nvarchar(50) = null, --車牌號
@Unit nvarchar(50) = null, --部門
@FeeType nvarchar(50) = null, --費用類型
@StartDate datetime = null, --查詢的起始時間
@EndDate datetime = null --查詢的結束時間
AS
BEGIN
select f.ID,
f.Number,
f.[Type],
f.FeeDate,
round(f.[Money],2) as [Money],
f.Status,
f.Memo,
c.id as cid,
c.unit1
from Fee f left join Car c
on f.Number = c.Number
where (f.Number = @Number or @Number is null) --如果@Number參數爲null的話那表示這個字段不在查詢的條件中;這可以在程序裏簡單的實現。
and (c.unit1 = @Unit or @Unit is null)
and (f.[type] = @FeeType or @FeeType is null)
and (f.Feedate >= @StartDate or @StartDate is null)
and (f.Feedate <= @EndDate or @EndDate is null)
order by f.FeeDate desc
END
程序裏面你只要把所有查詢條件的值都錄入進去。
例如:如果爲“全部”的話,那就把這個字段的值設置爲:null