关于批量比对和插入功能的SQL实现

shawls 2009-07-03 12:08:23
现在有一个这样的项目:

表:
DATA_INSERT
DATA_BUFF
DATA

DATA_INSERT表内是原始数据
DATA_BUFF表内是缓存数据
DATA表里面是最终数据

数据流程如下:
读文本数据,只要符合格式,写如INSERT表,
读INSERT表,比对BUFF表,如果BUFF表中没有重复,则插入BUFF表
读DATA表,比对DATA表,如果DATA表中没有重复,则插入DATA表


现在的问题是,如何将没有重复的数据批量插入下一个表,我现在是通过C#开发,一条一条比对,非常慢.
但是我用INSET语句去批量插入,总是不成功,有兄弟有好的帮助么?
...全文
146 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shawls 的回复:]
还要考虑ACCESS数据库的问题,由于数据量的用户对象的问题,不可能用SQL SERVER或者ORACLE

在ORACLE里面,我可以使用类似以下方式:

INSERT IN TO DATA_BUFF (A,B,C) VALUES (SELECT * FROM DATA_INSERT WHERE DATA_INSERT.A IN (SELECT A FROM DATA_BUFF))

[/Quote]
你都说了要最原始的数据库了,我还能有什么话说呢.
你先用C#写一个查询,例如SELECT A FROM DATA_BUFF,获取DATA_BUFF中所有存在的A的值,然后拼接SQL语句。实现INSERT IN TO DATA_BUFF (A,B,C) VALUES (SELECT * FROM DATA_INSERT WHERE DATA_INSERT.A IN ({0})),{0}的部分用刚才获取的A的所有值转换为逗号分割(字符串需要带上单引号)的形式替换。这里需要注意IN字句内最大允许被逗号分割的值的数量,像ORACLE就有1000个上限的限制。有限制你就分批传递吧。
shawls 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iabswfg858 的回复:]
C# codeinsert into tablename(aa,bb,cc) select'aa','bb','cc' union all select'aa','bb','cc' union all select'aa','bb','cc'
[/Quote]

在ACCESS里面没有办法用INSERT INTO 做批量插入,很郁闷,所以我特别标注了ACCESS数据库
iabswfg858 2009-07-03
  • 打赏
  • 举报
回复
insert into tablename(aa,bb,cc) select 'aa','bb','cc' union all select  'aa','bb','cc'  union all select 'aa','bb','cc'
shawls 2009-07-03
  • 打赏
  • 举报
回复


还要考虑ACCESS数据库的问题,由于数据量的用户对象的问题,不可能用SQL SERVER或者ORACLE

在ORACLE里面,我可以使用类似以下方式:

INSERT IN TO DATA_BUFF (A,B,C) VALUES (SELECT * FROM DATA_INSERT WHERE DATA_INSERT.A IN (SELECT A FROM DATA_BUFF))
shawls 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 f050304004 的回复:]
循环插入
用IF判断是否值已经存在
存在就CONTINUE
不存在就INSERT
[/Quote]
我现在就是这么做的,速度太慢了


[Quote=引用 1 楼 muyebo 的回复:]
http://blog.csdn.net/linjone/archive/2008/12/20/3566605.aspx
dataset.Update(dataset.Tables[0]);
这个方法我试过,相当的不错
[/Quote]

关键是我还要进行比对,如果重复就不插入,目前慢的地方在比对,实际上数据的量并不大,不到万条.
qldsrx 2009-07-03
  • 打赏
  • 举报
回复
先换SQL SERVER2008,然后用Merge语句操作,快速省心。
muyebo 2009-07-03
  • 打赏
  • 举报
回复
写错是
SqlDataAdapter .Update(dataset.Tables[0]);
上面地址的第一个方法就是
f050304004 2009-07-03
  • 打赏
  • 举报
回复
循环插入
用IF判断是否值已经存在
存在就CONTINUE
不存在就INSERT
muyebo 2009-07-03
  • 打赏
  • 举报
回复
http://blog.csdn.net/linjone/archive/2008/12/20/3566605.aspx
dataset.Update(dataset.Tables[0]);
这个方法我试过,相当的不错

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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