-- 检查存储过程是否存在,存在则删除 P202502080013 IF OBJECT_ID('dbo.[PR_ResetSALORDERPLAN_MBBA_yuyubo]', 'P') IS NOT NULL BEGIN DROP PROCEDURE dbo.PR_ResetSALORDERPLAN_MBBA_yuyubo; PRINT '存储过程 dbo.[PR_ResetSALORDERPLAN_MBBA_yuyubo] 已删除'; END GO -- 创建新的存储过程 CREATE PROCEDURE dbo.PR_ResetSALORDERPLAN_MBBA_yuyubo @saleOrderId INT=0 AS BEGIN -- 1. 声明游标 DECLARE cursor_name CURSOR FOR SELECT a.F_Amount,b.F_MBBA_Decimal_uky,a.FBILLNO,a.FSALEORGID,a.F_contractnumber,a.fid,b.FENTRYID AS wfid ,b.FRECADVANCEAMOUNT,a.F_EXPENSES FROM dbo.T_SAL_ORDER a WITH(NOLOCK) LEFT JOIN dbo.T_SAL_ORDERPLAN b WITH(NOLOCK) ON a.FID=b.FID INNER JOIN (SELECT DISTINCT [销售单主键ID],[整单累计退货金额],[整单正数订单总额] from [ZRP_YingShouMingXi_yuyubo] WHERE [整单正数订单总额]>0) cc ON [销售单主键ID]=a.FID WHERE (ISNULL(a.F_Amount,0) > 0 AND [整单正数订单总额]-ISNULL(a.F_Amount,0) -[整单累计退货金额]>0) AND (a.FID=@saleOrderId OR @saleOrderId=0) AND b.F_MBBA_DECIMAL_UKY=@FRecAdvanceAmount) BEGIN UPDATE T_SAL_ORDERPLAN SET F_MBBA_Decimal_uky=@FRecAdvanceAmount WHERE FENTRYID=@wfid; SELECT @amount=@amount-@FRecAdvanceAmount; END ELSE BEGIN IF(@amount>0) BEGIN UPDATE T_SAL_ORDERPLAN SET F_MBBA_Decimal_uky=@amount WHERE FENTRYID=@wfid; SELECT @amount=0; END END -- 获取下一条记录 FETCH NEXT FROM cursor_name INTO @F_AMOUNT, @F_MBBA_Decimal_uky,@FBILLNO,@FSALEORGID,@F_contractnumber,@fid,@wfid,@FRecAdvanceAmount,@F_EXPENSES; END; -- 4. 关闭游标 CLOSE cursor_name; -- 5. 释放游标资源 DEALLOCATE cursor_name; END --EXEC dbo.PR_ResetSALORDERPLAN_MBBA_yuyubo @saleOrderId = 0 -- int --UPDATE T_SAL_ORDERPLAN SET F_MBBA_Decimal_uky=0