CREATE PROCEDURE [dbo].[sl_workbydaylog_hour]
@begintime datetime,--开始时间
@endtime datetime --结束时间
AS
BEGIN
DECLARE @retucd int
DECLARE @erorcd char(2) --出错码
/* 初始化变量 */
SELECT @erorcd='99'
SELECT @erortx='未知错误'
create table #temp_5(
userid numeric(18, 0),--用户编号
startno varchar(10) COLLATE Chinese_PRC_CS_AI, --工作类型
gz_type varchar(10), --项目工作类型
prjtna varchar(200), --项目名
ctpdna varchar(200), --客户产品名称
ctpdno varchar(60) COLLATE Chinese_PRC_CS_AI, --客户产品
istrav varchar(20), --是否出差
addres varchar(100), --所在地
prjtcd varchar(60), --项目编号
contcd varchar(60), --合同编号
bgtime datetime, --开始时间
edtime datetime, --截止时间
cstate varchar(10), --审核状态
wdate datetime,
salesdept varchar(50), --售前支持申请起草人部门
workhour varchar(10) --工时
)
/* 获取工作周报数据, 仅项目拓展部*/
insert into #temp_5 (startno,gz_type,ctpdno,ctpdna,prjtcd,prjtna,istrav,addres,bgtime,edtime,cstate,userid,workhour,wdate)
select a.rstate ,a.gz_type, a.ctpdcd ,a.rz_c_proname ,a.ctpdcd ,a.rz_c_proname ,a.istrav ,a.rz_c_addr
,a.rz_c_bdate ,a.rz_c_bdate , a.cstate ,a.userid,a.rz_c_hour,a.ctdate
from sl_pm_daylog_content a
inner join pcmc_user u on a.userid=u.userid
--where a.rz_c_bdate>='2013-04-01' and a.rz_c_bdate<='2013-04-30' and b.rz_state=1 and u.deptid=92
where a.rz_c_bdate>=@begintime and a.rz_c_bdate<=@endtime
order by a.userid,a.rz_c_bdate
/*8.返回数据*/
select CONVERT(varchar(6),a.bgtime,112),(case when d.pdeptid=1 then d.deptname else d2.deptname end),
d.deptname,u.username,tp.rs_stana,tp2.parana,a.prjtna,a.ctpdna,
(case when a.istrav='0' then '否' else '是' end),
a.addres,a.prjtcd,a.contcd,a.bgtime,a.edtime,datediff(d,bgtime,edtime)+1,
(case when a.cstate='0' then '未审核' when a.cstate='1' then '已审核' else '不通过' end),
a.salesdept,a.wdate,a.workhour
from #temp_5 a
left join pcmc_user u on u.userid=a.userid
left join pcmc_dept d on d.deptid=u.deptid
left join pcmc_dept d2 on d2.deptid=d.pdeptid
left join sl_pm_daylog_nproject tp on tp.rs_state=a.startno
left join pcmc_knp_para tp2 on tp2.paratp='rz_type' and tp2.paracd=a.gz_type
这里返回结果5-8W左右,java后台要接收这些记录然后写入excel文件,但记录过多,内存溢出,或者性能差,现在如何实现分页查询,一批一批传到后台来写呢?
你的方法是可以,但我这是做导出,不是做页面显示,页面显示的分页查已经有了,主要是导出时候分批查分批导,因为tomcat服务器性能一般,数据量大的话多用户同时页面导的时候容易挂,所以现在想优化这个存储过程,一次查改成分页分批查分批导!分还是给你吧,但追加就没了!要是你能帮我解决分批导的存储结构优化
请加Q2506820281 解决后给分300,要实力哦!
还是我之前说明的,你的问题是在于需要优化写入Excel的代码。
可采用row_number的方式来实现。
如表中数据如下:
id name
s1 张三
s3 李四
s5 王五
s7 赵六
s9 孙七
s11 杨八
如果要分页,只需要在查询中带上行号即可。
select id,name,row_number() over (order by id) rn from 表名最后结果:
id name rn
s1 张三 1
s3 李四 2
s5 王五 3
s7 赵六 4
s9 孙七 5
s11 杨八 6
这样就完全满足了分页需求。