用存储过程实现,需求如下:A表 Account,ACC_Type,IsMustCheck,Cash,Year,Month
(主键:Account-Year-Month)
B表 Account,Dept,DeptName
(主键:Account)
C表 Account,BillState,Year,Month
(主键:Account-Year-Month)D表 Account,ACC_Type,IsMustCheck,Cash,Year,Month,PrintTag
Dept,DeptName,Mark
(主键:Account-Year-Month,PrintTag默认0,Mark默认0现在要求将A表所有数据都导入到D表相关列中,
1)差额列固定的如Dept,DeptName从B表中取得
2)动态列BillState必须从C表中查相应的数据(Account-Year-Month),没有就写默认或不写
3)在D表本身查本季度已打印过的有效次数(PrintTag=1 =1)
少于1次,Mark=1,否则Mark=0组合数据后,插入D表新记录,并且其中发生一次错误,就会滚到原始未处理状态
请各位帮帮忙,新手一个,估计A表和D表中每月的纪录有6万条,最大保存1-2年,可能也就20W-40W条,所以应考虑效率?
(主键:Account-Year-Month)
B表 Account,Dept,DeptName
(主键:Account)
C表 Account,BillState,Year,Month
(主键:Account-Year-Month)D表 Account,ACC_Type,IsMustCheck,Cash,Year,Month,PrintTag
Dept,DeptName,Mark
(主键:Account-Year-Month,PrintTag默认0,Mark默认0现在要求将A表所有数据都导入到D表相关列中,
1)差额列固定的如Dept,DeptName从B表中取得
2)动态列BillState必须从C表中查相应的数据(Account-Year-Month),没有就写默认或不写
3)在D表本身查本季度已打印过的有效次数(PrintTag=1 =1)
少于1次,Mark=1,否则Mark=0组合数据后,插入D表新记录,并且其中发生一次错误,就会滚到原始未处理状态
请各位帮帮忙,新手一个,估计A表和D表中每月的纪录有6万条,最大保存1-2年,可能也就20W-40W条,所以应考虑效率?
1) 一年保存100W条左右数据,不是20W-40W
2) 在D表本身查本季度已打印过的有效次数(PrintTag=1 =1)
少于1次,Mark=1,否则Mark=0, 就是根据Account和以上PrintTag、字段来查
比如3月份,前1、2月打过一次,这一次插入的Mark就为0了
--使用事务即可,如下:--当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。
set xact_abort on
begin tran
--你的游标代码
commit tran
0000000000002 'S' 'M' 1000.00 2007 4
0000000000003 'B' 'M' 1000000.00 2007 4
0000000000004 'M' 'M' 100000.00 2007 4
B表 Account,Dept,DeptName 主键:Account
0000000000001 111 支行网点A
0000000000002 111 支行网点B
0000000000003 111 支行网点C
0000000000004 111 支行网点A
D表 Account,ACC_Type,IsMustCheck,Cash,Year,Month,Dept,DeptName,BillState,Mark 主键:Account-Year-Month,BillState默认0,Mark默认0
Account ACC_Type,IsMustCheck, Cash, Year,Month,Dept,DeptName,BillState,Mark
0000000000001 'B' 'Y' 10000000.00 2007 4 111 支行网点A 1 0现在要根据A表记录将当月记录全部要在D表中有,(Dept,DeptName根据B表关联)中,Account,ACC_Type,IsMustCheck,Cash,Year,Month,Dept,DeptName都有了
每次插入只根据月份来,只操作1月数据循环A表中当月纪录,对每账号,D表中当月有的记录,更新Cash列数据,保留BillState列值,否则就插入
而值的确定,依赖于D表中本季度是否存在记录,如现在为4月,查询是否存在同一账号,3月份的纪录,有就为0,没有就为1,插入
现在正常操作如下:
查询A表,有以下几个操作
1)看D表中是否有相同数据
2)有修改,没有插入
3)查询D表同季度有没有数据
4)有就改写数据Update如果A表有效数据6W条记录(创建A表临时表只存当月要插的数据,不从原始A表查)
估计要20W次操作,并且某些操作很耗费时间,效率上不去阿