declare @bcpendtime datetime
declare @datastru_ok int
declare @datastru_err int
declare @datastru int
declare @daynum int
declare @datacode int
declare @retcode int
declare @ctltrtyp char(1)
--数据修正
--信用卡去'63'
if (@strucode=0)
begin
update bcp_mx_jkls
set pan_v=substring(pan_v,3,16)
where substring(pan_v,1,6) in ('635359','636014','634910')
and transaction_code in ('4300','5300')
if (@@error<>;0)
begin
select @datastru=@datastru_err+2,@strucode=-1,@strudesc='error: update bcp_mx_jkls 失败'
end
end
--选出有用的数据
if (@strucode=0)
begin
select ls.datadate as ctlac_dat,
ls.datacode as datacode,
ka.cltac_no as ctlac_no,
substring(ls.transmission_time,5,6) as ctlac_tim,
ls.center_ssn as ctljrnno,
ls.pan_v as ctlcrdno,
ls.transaction_code as ctltr_cod,
case when ls.transaction_code='4300'
then -ls.transaction_amount
else ls.transaction_amount
end as ctlamt,
ls.merchant as ctltrbr,
ls.terminal_code as ctladr,
ls.authnum as ctlcrdvno,
ls.ctltrtyp as ctltrtyp
into #tmp_jkls
from bcp_mx_jkls ls,bdt_kgl.dbo.bd_ka_clt ka
where ka.cltcrd_no=ls.pan_v and transaction_code in ('4300','5300')
if (@@error<>;0)
begin
select @datastru=@datastru_err+2,@strucode=-1,@strudesc='error: crt #tmp_jkls 失败'
end
end
-----------------------------------------------------------------------------------------------------------------
--以临时表内数据为准
--临时表内为日的全量数据
if (@strucode=0)
begin
--找出临时表内有几日数据
select @daynum=0
select distinct ctlac_dat into #temp1
from #tmp_jkls
if (@@error=0)
select @daynum=count(*) from #temp1
if (@daynum=0)
select @datastru=@datastru_err+1,@strucode=-1,@strudesc='error: ETL_kgl.dbo.bcp_mx_jkls 表内无数据'
end
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--数据备份到 bdt_kgl.dbo.bd_mx_jkls
if (@strucode=0)
begin
--删除基本表内数据
delete bdt_kgl.dbo.bd_mx_jkls
from bdt_kgl.dbo.bd_mx_jkls t1,#temp1 t2
where t1.datadate=t2.ctlac_dat
if (@@error<>;0)
begin
select @datastru=@datastru_err+2,@strucode=-1,@strudesc='error: delete bdt_kgl.dbo.bd_mx_jkls 失败'
end
end
if (@strucode=0)
begin
--插入数据
insert into bdt_kgl.dbo.bd_mx_jkls
(datadate,center_ssn,transmission_time,transaction_code,transaction_amount,
pan_v,cb_code,ob_code,org_ssn,org_amt,merchant,authnum,
terminal_code,checkdetail_flag,center_ssn_true,ctltrtyp,datacode)
select datadate,center_ssn,transmission_time,transaction_code,transaction_amount,
pan_v,cb_code,ob_code,org_ssn,org_amt,merchant,authnum,
terminal_code,checkdetail_flag,center_ssn_true,ctltrtyp,datacode
from bcp_mx_jkls
if @@error<>;0
select @datastru=@datastru_err+3,@strucode=-10001,@strudesc='error: 数据有问题保留断点退出'
end
-------------------------------------------------------------------------------------------------------------------
if (@strucode=0)
begin
--删除基本表内数据
delete bdt_kgl.dbo.bd_mx_ctl
from bdt_kgl.dbo.bd_mx_ctl t1,#temp1 t2
where t1.ctlac_dat=t2.ctlac_dat and t1.ctltrtyp=@ctltrtyp
if (@@error<>;0)
begin
select @datastru=@datastru_err+2,@strucode=-1,@strudesc='error: delete bdt_kgl.dbo.bd_mx_ctl 失败'
end
if (@strucode=0)
begin
--插入数据
insert into bdt_kgl.dbo.bd_mx_ctl
(ctlac_dat,datacode,ctlac_no,ctlac_tim,ctljrnno,ctlcrdno,
ctltr_cod,ctlamt,ctltrbr,ctladr,ctlcrdvno,ctltrtyp,
ctlvc_hn,ctlvchcls,ctlvchno,ctlchgflg,ctlamtind,ctlsmrflg,
ctltl_id,ctljurcod,ctlerrdat,ctlremark)
select ctlac_dat,datacode,ctlac_no,ctlac_tim,ctljrnno,ctlcrdno,
ctltr_cod,ctlamt,ctltrbr,ctladr,ctlcrdvno,ctltrtyp,
space(,0,0,'1','0', '0','JHXF',space(6),space(,
'JHXF'+ctltrbr
from #tmp_jkls
if @@error<>;0
select @datastru=@datastru_err+3,@strucode=-10001,@strudesc='error: 数据有问题保留断点退出'
drop table #tmp_jkls
end
-------------------------------------------------------------------------------------------------------------------
if (@strucode=0)
begin
exec bdt_kgl.dbo.pc_index_bd_mx_ctl 1,@retcode output
if (@retcode<>;0)
begin
select @datastru=@datastru_err+1,@strucode=-1,@strudesc='建索引失败 bdt_kgl.dbo.bd_mx_ctl.Index_mx'
end
end
--修改历史表数据
update ctl_bcp_hst
set bcpendtime=@bcpendtime,
spendtime=getdate(),
datreccount=@datreccount,
bcpreccount=@bcpreccount,
errreccount=@errreccount,
datastru=@datastru,
datadesc=@strudesc
where datadate=@datadate and chkcode=@chkcode and bcpmbr=space(20)
if (@@rowcount<>;1 or @@error<>;0)
select @strucode=-10001,@strudesc='系统错误,修改ctl_bcp_hst失败,已保留断点'