嘿,我在SQL Server 2000下的存储过程中有一个游标(现在无法更新),它更新了所有表,但通常需要几分钟才能完成.我需要让它更快.这是由任意产品ID过滤的示例表; 示例表http://img231.imageshack.us/img231/9464/75187992.jpg 而GDEPO:Entry depot,CDEPO:Exit depot,Adet:quantity,E_CIKAN使用的数量.
记录解释:
1:20单位进入仓库01,2:10单位叶01. 3:5单位叶01(E_CIKAN为第1记录现在为15)4:10单位进入仓库01. 5:3单位离开01从第1记录.请注意,现在第一条记录的E_CIKAN设置为18. 6:这就是问题所在:3个单元需要离开库01.从第1条记录开始需要2个单元,从第5条记录需要1个单元.我的SP可以处理这个如图所示的罚款,除非它真的很慢.
这是存储过程翻译成英文;
CREATE PROC [dbo].[UpdateProductDetails]
as
UPDATE PRODUCTDETAILS SET E_CIKAN=0;
DECLARE @ID int
DECLARE @SK varchar(50),@DP varchar(50) --SK = STOKKODU = PRODUCTID, DP = DEPOT
DECLARE @DEMAND float --Demand=Quantity, We'll decrease it record by record
DECLARE @SUBID int
DECLARE @SUBQTY float,@SUBCK float,@REMAINS float
DECLARE SH CURSOR FAST_FORWARD FOR
SELECT [ID],PRODUCTID,QTY,EXITDEPOT FROM PRODUCTDETAILS WHERE (EXITDEPOT IS NOT NULL) ORDER BY [DATE] ASC
OPEN SH
FETCH NEXT FROM SH INTO @ID, …Run Code Online (Sandbox Code Playgroud)