关于批量比对和插入功能的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语句去批量插入,总是不成功,有兄弟有好的帮助么?
...全文
55 点赞 收藏 9
写回复
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]);
这个方法我试过,相当的不错
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告