动态传参处理数据库历史数据__根据游标

业务需求: 根据当前期次,累计之前的该字段的值,即至上期累计(比如现在是8月的一条数据,则累计八月之前的,在比如是七月的一条数据,则累计七月之前的累计)
--------更新至历史数据"至上期累计扣罚/代付金额-------------

--定义第一个函数接收"当年金额"值,作为临时变量
GO
CREATE FUNCTION dbo.func_date_get_DNje(@date_P_HT_ID varchar(8),@date_F_DEPT_ID varchar(8),@date_F_TJNF varchar(8),@date_F_TJYF varchar(8)) 
--CREATE FUNCTION 函数名称(@参数名 参数的数据类型)
RETURNS varchar(20)   --返回返回值的数据类型
--[WITH ENCRYPTION]  --如果指定了 encryption 则函数被加密
as
BEGIN
	declare @result_DNje decimal
	SELECT   
		@result_DNje=ISNULL(SUM(ISNULL(F_JFKDJE, 0.00)),0.00)
	from TE_HTGL_JFBL
	WHERE   (F_EFFECTIVE = 1) 
	and F_HT_ID=@date_P_HT_ID
	and F_DEPT_ID=@date_F_DEPT_ID
	and F_TJNF=@date_F_TJNF
	and F_TJYF < @date_F_TJYF 
  RETURN  @result_DNje
END
GO

-- 定义第二个函数接收"往年金额"值,作为临时变量
CREATE FUNCTION dbo.func_date_get_WNje(@date_P_HT_ID varchar(8),@date_F_DEPT_ID varchar(8),@date_F_TJNF varchar(8)) 
--CREATE FUNCTION 函数名称(@参数名 参数的数据类型)
RETURNS varchar(20)   --返回返回值的数据类型
--[WITH ENCRYPTION]  --如果指定了 encryption 则函数被加密
as
BEGIN
	declare @result_WNje decimal
	SELECT   
		@result_WNje=ISNULL(SUM(ISNULL(F_JFKDJE, 0.00)),0.00)
	from TE_HTGL_JFBL
	WHERE   (F_EFFECTIVE = 1) 
		and F_HT_ID=@date_P_HT_ID
		and F_DEPT_ID=@date_F_DEPT_ID
		and F_TJNF< @date_F_TJNF
  RETURN  @result_WNje
END
GO

-- 定义游标,对当年,往年的值计算
DECLARE MyCursor CURSOR FOR     /*定义游标,select语句中参数的个数必须要和从游标取出的变量名相同 */
SELECT F_ID,F_HT_ID,F_DEPT_ID,F_TJNF,F_TJYF FROM TE_HTGL_JFBL
OPEN MyCursor      /*打开游标*/
/*定义参数*/
declare @date_P_HT_ID nvarchar(50),@date_F_DEPT_ID nvarchar(50),@date_F_TJNF nvarchar(50),@date_F_TJYF nvarchar(50),@date_F_ID nvarchar(50) /*定义变量*/

/*从游标里取出数据赋值到我们刚才声明的变量中(移动游标指向到第一条数据,提取第一条数据存放在变量中) */ 
fetch next from MyCursor into @date_F_ID,@date_P_HT_ID,@date_F_DEPT_ID,@date_F_TJNF,@date_F_TJYF  /*写入数据*/
while @@FETCH_STATUS = 0                 /*开始循环*/
begin
	declare @sumje nvarchar(50)
	select @sumje = cast(dbo.func_date_get_DNje(@date_P_HT_ID,@date_F_DEPT_ID,@date_F_TJNF,@date_F_TJYF) as decimal)+cast(dbo.func_date_get_WNje(@date_P_HT_ID,@date_F_DEPT_ID,@date_F_TJNF) as decimal)
	update TE_HTGL_JFBL set F_ZSQKDJE = @sumje  WHERE   F_ID=@date_F_ID  -- AND F_EFFECTIVE = 1   
fetch next from MyCursor into @date_F_ID,@date_P_HT_ID,@date_F_DEPT_ID,@date_F_TJNF,@date_F_TJYF
end
close Mycursor
deallocate Mycursor


DROP FUNCTION func_date_get_DNje;   
DROP FUNCTION func_date_get_WNje;  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值