一个期末截数的存储过程,执行速度反应慢到程序的反应时间都超过2000秒而导致出错,请大侠帮帮忙看一下,有么有好的改进方法。谢谢了ALTER PROCEDURE [dbo].[wzprinvt_stock]
@inputer varchar(50),
@beg_date datetime,
@end_date datetime
 AS-- =============================================
-- Author: yitiao
-- Create date: <2011-03-30>
-- =============================================
INSERT INTO invt_stock
(INV_PART_NUMBER, INV_NAME, INV_DESCRIPTION, GROUP_DESC, UNIT_NAME, quantity, 
LOCATION, stock_area, stock_weight,stock_date, employee_name)
SELECT INV_PART_NUMBER, INV_NAME, INV_DESCRIPTION, GROUP_DESC, UNIT_NAME, quantity, 
LOCATION, stock_area, stock_weight,@end_date,@inputer
FROM  invt_stock
where stock_date = @beg_date
--增加期初仓库材料库存(复制一次)insert into invt_stock
( INV_PART_NUMBER, stock_date, employee_name,quantity,stock_area,stock_weight )
SELECT distinct INV_PART_NUMBER, @end_date,@inputer,0,0,0
FROM  invt_incept
WHERE ship_DATE>=dateadd(day,1,@beg_date) and ship_DATE<=dateadd(day,1,@end_date) and
INV_PART_NUMBER not in (select INV_PART_NUMBER from invt_stock)  
--比较仓库材料库存,如有新材料便插入。update invt_stock set quantity=invt_stock.quantity+t_invt_incept1.quantity 
from invt_stock inner join 
(select INV_PART_NUMBER,sum(quantity) quantity from invt_incept where 
ship_DATE>=dateadd(day,1,@beg_date) and ship_DATE<=dateadd(day,1,@end_date)  group by INV_PART_NUMBER)t_invt_incept1
on invt_stock.INV_PART_NUMBER=t_invt_incept1.INV_PART_NUMBER 
WHERE stock_date = @end_date
--更新库存数量update invt_stock set stock_area=invt_stock.stock_area+t_invt_incept2.incept_area 
from invt_stock inner join 
(select INV_PART_NUMBER,sum(incept_area) incept_area from invt_incept where 
ship_DATE>=dateadd(day,1,@beg_date) and ship_DATE<=dateadd(day,1,@end_date)  group by INV_PART_NUMBER)t_invt_incept2
on invt_stock.INV_PART_NUMBER=t_invt_incept2.INV_PART_NUMBER 
WHERE stock_date = @end_date
--更新库存面积update invt_stock set stock_weight=invt_stock.stock_weight+t_invt_incept3.incept_weight 
from invt_stock inner join 
(select INV_PART_NUMBER,sum(incept_weight) incept_weight from invt_incept where 
ship_DATE>=dateadd(day,1,@beg_date) and ship_DATE<=dateadd(day,1,@end_date)  group by INV_PART_NUMBER)t_invt_incept3
on invt_stock.INV_PART_NUMBER=t_invt_incept3.INV_PART_NUMBER 
WHERE stock_date = @end_date
--更新库存重量
update invt_stock set LOCATION=t_invt_incept4.LOCATION , INV_NAME=t_invt_incept4.INV_NAME, 
INV_DESCRIPTION=t_invt_incept4.INV_DESCRIPTION, GROUP_DESC=t_invt_incept4.GROUP_DESC, UNIT_NAME=t_invt_incept4.UNIT_NAME
from invt_stock inner join 
(select INV_PART_NUMBER,LOCATION,INV_NAME,INV_DESCRIPTION,GROUP_DESC,UNIT_NAME from invt_incept 
where ship_DATE>=dateadd(day,1,@beg_date) and ship_DATE<=dateadd(day,1,@end_date) )t_invt_incept4
on invt_stock.INV_PART_NUMBER=t_invt_incept4.INV_PART_NUMBER
WHERE stock_date = @end_date 
--更新名称,工厂,日期,人员
insert into invt_stock
( INV_PART_NUMBER, stock_date, employee_name,quantity,stock_area,stock_weight )
SELECT distinct INV_PART_NUMBER,@end_date,@inputer,0,0,0
FROM  invt_issue
WHERE TDATE>=dateadd(day,1,@beg_date) and TDATE<=dateadd(day,1,@end_date) and
INV_PART_NUMBER not in (select INV_PART_NUMBER from invt_stock) 
--插入出库新材料编码update invt_stock set quantity=invt_stock.quantity-t_invt_issue1.quantity 
from invt_stock inner join 
(select INV_PART_NUMBER,sum(quantity) quantity from invt_issue where 
TDATE>=dateadd(day,1,@beg_date) and TDATE<=dateadd(day,1,@end_date)  group by INV_PART_NUMBER)t_invt_issue1
on invt_stock.INV_PART_NUMBER=t_invt_issue1.INV_PART_NUMBER
WHERE stock_date = @end_date
--更新已有的数量,减出库update invt_stock set stock_area=invt_stock.stock_area-t_invt_issue2.issue_area
from invt_stock inner join 
(select INV_PART_NUMBER,sum(issue_area) issue_area from invt_issue where 
TDATE>=dateadd(day,1,@beg_date) and TDATE<=dateadd(day,1,@end_date) group by INV_PART_NUMBER)t_invt_issue2
on invt_stock.INV_PART_NUMBER=t_invt_issue2.INV_PART_NUMBER
WHERE stock_date = @end_date
--更新已有的面积,减出库update invt_stock set stock_weight=invt_stock.stock_weight-t_invt_issue3.issue_weight
from invt_stock inner join 
(select INV_PART_NUMBER,sum(issue_weight) issue_weight from invt_issue where 
TDATE>=dateadd(day,1,@beg_date) and TDATE<=dateadd(day,1,@end_date)  group by INV_PART_NUMBER)t_invt_issue3
on invt_stock.INV_PART_NUMBER=t_invt_issue3.INV_PART_NUMBER
WHERE stock_date = @end_date
--更新已有的重量,减出库update invt_stock set LOCATION=t_invt_issue4.LOCATION, INV_NAME=t_invt_issue4.INV_NAME, 
INV_DESCRIPTION=t_invt_issue4.INV_DESCRIPTION, GROUP_DESC=t_invt_issue4.GROUP_DESC, UNIT_NAME=t_invt_issue4.UNIT_NAME
from invt_stock inner join 
(select INV_PART_NUMBER,LOCATION,INV_NAME,INV_DESCRIPTION,GROUP_DESC,UNIT_NAME from invt_issue where 
TDATE>=dateadd(day,1,@beg_date) and TDATE<=dateadd(day,1,@end_date) )t_invt_issue4
on invt_stock.INV_PART_NUMBER=t_invt_issue4.INV_PART_NUMBER 
WHERE stock_date = @end_date
--更新工厂,日期,人员