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 the INNER the JOIN c6.dbo.cw_fybx B ON a.MainID = b.mainid left the Join c6.dbo.ModuleApproveFlag C ON a.mainid = c.ID WHERE . 1 = . 1 and delflag = ' 0 ' and app_flag = ' . 1 ' and fylx = ' Expense ' ) - a collection of isolated desired cursor into the oPEN kjya - open a cursor FETCH The NEXT the FROM kjya the INTO @bmid , @gs , @kjnd , @kjqj - reading the first line of data the WHILE @@ FETCH_STATUS = 0 the BEGIN the INSERT the INTO # c6bx the SELECT the DISTINCT bmid, BM, SUM (JE) AS JE, (jbcsj. dbo.fn_getgs (bmid)) AS SSGS, @kjnd AS kjnd, @kjqj AS kjqj the FROM [ C6 ] . [ the 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 The NEXT from kjya the INTO @bmid , @gs , @kjnd , @kjqj - read the next row of data the END the CLOSE kjya; - close the cursor the DEALLOCATE kjya; - releases the puck the MERGE the INTO [ jbcsj ] . [ The dbo ] . [ BMB ] the USING ( the SELECT bmid, BM, JE, SSGS, kjnd, kjqj the FROM # c6bx) CC the ON (bmb.bmid = cc.bmid and bmb.ssgs = cc.ssgsand 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