数据导入的undo功能,如何实现?提供解决思路即可。

dg9j 2003-03-24 02:48:44
文本文件一堆 a,b,c... 结构相同
临时表 tmptbl
目的表 dstbl

现在是这样做:
1、truncate table tmptbl
2、将文件a 用“bluk insert”导入tmptbl
3、将tmptbl数据插入dstbl(结构不同,所以要转换一下)
4、清空tmptbl,导入下一个文件

问题是可能在原始文件a,b,c中存在相同的记录
所以在第3步有个变化,如果导入过程中出错(重复记录),
则将tmptbl中的记录一条条的插入dstbl

现在的麻烦是:
用户要求undo功能,就是如果使用undo功能,
所有原先插入的数据要在表dstbl中删除。
而那些重复的记录则仍要保留(因为原先有这些记录)。

先写到这里,表达不是很清楚。希望大家能看明白
...全文
73 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dg9j 2003-03-24
  • 打赏
  • 举报
回复
说明一下,dstbl表相当大,备份和新建临时表的时间用户是忍受不了的。
愉快的登山者 2003-03-24
  • 打赏
  • 举报
回复
1。在建立一个临时表,结构与dstbl相同,切数据一样:
select * into #T from dstbl;
2。将原来对dstbl的操作,改为对#T操作;
3。若全部成功,将#T导入dstbl表中:
truncate table dstbl
insert into dstbl select * from #T
4。若不成功,做undo,将#T表删除,dstbl没有变化。
XLYT 2003-03-24
  • 打赏
  • 举报
回复
事务处理。
CrazyFor 2003-03-24
  • 打赏
  • 举报
回复
1、truncate table tmptbl
2、将文件a 用“bluk insert”导入tmptbl
3 备份DSTBL现有记录
4、将tmptbl数据插入dstbl(结构不同,所以要转换一下)
5 UNDO时,把备份表中的数据覆盖DSTBL表。
6、清空tmptbl,导入下一个文件

------
方法二,


1、truncate table tmptbl
2、将文件a 用“bluk insert”导入tmptbl
4、只将在tmptbl表中,并且不在DSTBL表中的数据插入dstbl
6、清空tmptbl,导入下一个文件

34,872

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧