我们在开发过程中,特别是数据库系统的开发中经常会遇到多条件的查询状况。例如:查询某一个部门某个时间段的车辆费用支出,这就涉及到多条件查询。其实多条件查询的方法有很多种,有些写法是比较烦琐,效率也不高,比如一个条件一个条件去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

posted on 2010-02-09 13:05  OceanShare  阅读(536)  评论(1编辑  收藏  举报