利用游标实现按会计月汇总数据,利用MERGE INTO实现数据库添加或更新

CREATE  PROCEDURE [dbo].[sys_btainC6]
AS
    Create Table #c6bx
    (

        bmid  varchar(100),    
        bm  varchar(100),    
        je  decimal(28,2),
        ssgs  varchar(300),
        kjnd  varchar(100),
        kjqj  varchar(100)
    )
    BEGIN
    DECLARE @bmid varchar(50) 
DECLARE @gs varchar(50) 
DECLARE @kjnd varchar(50) 
DECLARE @kjqj int 
DECLARE kjya CURSOR --定义游标
FOR (SELECT DISTINCT bmid,(jbcsj.dbo.fn_getgs (bmid)) gs,YEAR(bxrq) as kjnd, MONTH(bxrq)as kjqj FROM [c6].[dbo].[cw_fybxcb]a INNER JOIN c6.dbo.cw_fybx b on a.MainID=b.mainid left join  c6.dbo.ModuleApproveFlag c on a.mainid=c.id where 1=1 and DelFlag='0' and app_flag='1' and  fylx='费用类') --查出需要的集合放到游标中
OPEN kjya --打开游标
FETCH NEXT FROM kjya INTO @bmid,@gs,@kjnd,@kjqj --读取第一行数据
WHILE @@FETCH_STATUS = 0
    BEGIN
INSERT INTO #c6bx
       SELECT DISTINCT bmid,bm,sum(je) as je,(jbcsj.dbo.fn_getgs (bmid)) as ssgs,@kjnd as kjnd, @kjqj as kjqj FROM [c6].[dbo].[cw_fybxcb]a INNER JOIN c6.dbo.cw_fybx b on a.MainID=b.mainid
left join  c6.dbo.ModuleApproveFlag c on a.mainid=c.id where 1=1 and DelFlag='0' and app_flag='1' and  fylx='费用类'
 and bxrq BETWEEN cast((@kjnd+'-'+cast((@kjqj-1) as VARCHAR(2))+ '-26') as date)  and  cast((@kjnd+'-'+cast(@kjqj as VARCHAR(2))+ '-25')as date) 
and bmid=@bmid
 and @gs is not null GROUP BY bm,bmid
        FETCH NEXT from kjya INTO @bmid,@gs,@kjnd,@kjqj--读取下一行数据
    END
CLOSE kjya; --关闭游标
DEALLOCATE kjya; --释放游标
MERGE INTO [jbcsj].[dbo].[bmb]
USING (SELECT bmid,bm,je,ssgs,kjnd,kjqj FROM #c6bx ) cc
ON (bmb.bmid=cc.bmid and bmb.ssgs=cc.ssgs and bmb.kjnd=cc.kjnd and bmb.kjqj=cc.kjqj) 
WHEN MATCHED THEN 
    UPDATE 
    SET bmb.je=cc.je
WHEN NOT MATCHED THEN 
    INSERT([bm], [je], [ssgs], [kjnd], [kjqj], [bmid]) VALUES (cc.bm,cc.je,cc.ssgs,cc.kjnd,cc.kjqj,cc.bmid);

    drop table #c6bx
END

 

MERGE INTO 目标表 USING 数据源表 ON(0=1) 的用法

转载于:https://www.cnblogs.com/lydg/p/11368748.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值