应收单应付单到期日修改数据处理SQL原创
6人赞赏了该文章
486次浏览
编辑于2024年01月29日 22:45:44
应用场景:部分历史单据的到期日需要修改,但已审核状态的单据无法修改,则可选择从数据库修改。
涉及数据表:
应收单单据头:T_AR_RECEIVABLE
应收单收款计划:T_AR_RECEIVABLEPLAN
应付单单据头:T_AP_PAYABLE
应付单付款计划:T_AP_PAYABLEPLAN
涉及字段:(表头和计划字段名相同)
到期日字段名:FENDDATE
以下SQL是以应收单为例,应付单将对应表名换一下即可。
--根据指定的资料更新应收单到期日 --1.创建临时表 字段名:单据编号、新到期日 select a.fbillno,a.FENDDATE into #temp1 from T_AR_RECEIVABLE a where 1=0 --2.将要修改的单据编号以如下的格式插入临时表 单据编号不要重复,日期格式没要求 insert into #temp1 values ('AR00000505','2023/3/31'), ('AR00000504','2023/2/2'), ('AR00000500','2023/2/2') --3.修复前全表备份 select * into T_AR_RECEIVABLEPLAN_sqlbak_20230207 from T_AR_RECEIVABLEPLAN select * into T_AR_RECEIVABLE_sqlbak_20230207 from T_AR_RECEIVABLE --4.更新单据头及付款计划的到期日字段 --4.1.更新单据头的到期日字段 merge into T_AR_RECEIVABLE t1 using( select a.fbillno,a.fid,a.fdate,a.FENDDATE,c.fenddate newdate from #temp1 c inner join T_AR_RECEIVABLE a on c.FBILLNO=a.fbillno where c.fenddate<>a.fenddate ) t2 on (t1.fid=t2.fid) when matched then update set t1.fenddate=t2.newdate; --4.2.更新收款计划的到期日字段 merge into T_AR_RECEIVABLEPLAN t1 using( select a.fbillno,a.fid,a.fdate,b.fentryid,b.FENDDATE,c.fenddate newdate from #temp1 c inner join T_AR_RECEIVABLE a on c.FBILLNO=a.fbillno left join T_AR_RECEIVABLEPLAN b on a.fid=b.fid where c.fenddate<>b.fenddate ) t2 on (t1.fentryid=t2.fentryid) when matched then update set t1.fenddate=t2.newdate;
推荐阅读