小弟需要做业务数据的查询,原始表中数据量比较大(1年有大概50万条),下面是问题:(为了描述方便,我只交代一些对写Sql关键的东西)
1、原始表中数据是按日按人存放,即可以认为每天每人一条记录
2、原始表的列也比较多,有几十列(实际上为了查询方便,我这个指的“原始表”是一个“多个真正的原始表的视图”)
3、查询时候用户(1)选择时间段(2)选择要显示的列(3)选择要显示的人,然点击查询出结果我之前是这么实现的:
1、在程序中写了Sql模板,例如这样:
select * from 原始表
where StartDate >= @StartDate 
      and EndDate <= @EndDate 
      and Person in ( PersonList )    //这里的PersonList是一个字符串变量,里面放的东西是从页面获取的查询需要显示的人,例如"'张三', '李四', '王五'" 结果是,这样下来,数据量一大,经常出现“服务器超时”的问题,我在网上插了一下,设置SqlCommand和SqlConnection的Timeout=0好像可以解决这个问题,但是试了一下,不理想,于是想改成存储过程,但是又不知道Sql中包含这种“in”的语法,怎么写成存储过程,用哪种类新的sql参数可以把PersonList传给存储过程呢?另外还有一个问题,如果这样写的sql,怎么转出成存储过程:
主要是Sum里面的东西,在存储过程中怎么用Sql参数来实现string str_sql = " SELECT 姓名, 日期, SUM(" + this.TargetData + ")" + " FROM dbo.[view_DayXianlu_Total] "
+ " WHERE 日期 >= @startdate AND 日期 <= @enddate "
+ " AND 姓名 IN ( " + this.Range_name + " )"
+ " GROUP BY 姓名, 日期 " ;