请问如何将成批的数据插入到数据库表中?
比如自动生成了一万条记录。不insert一万次的话,有什么好办法?
for I:= 1 to 10000 do
begin
//insert数据库表
end
以上方法要insert10000次,时间久了,系统要崩溃
问题点数:9、回复次数:12Top
1 楼zzq4823(高原猫)回复于 2006-03-07 17:43:23 得分 1
insert into table1 select .... from table2
1和2的字段要对应,如有差异,可先将2建立成视图以保证字段对应关系一致Top
2 楼net_morning(矿泉水)回复于 2006-03-07 19:25:55 得分 0
谢谢楼上。不过成批的数据是delphi生成的,不是sql生成的,与表2没有关系Top
3 楼Rubi(浪迹Csdn各个板块!MS-Borland-IBM-SUN-水区-在去哪里呢?)回复于 2006-03-07 19:55:13 得分 1
1,select * into #tmp from new
2, insert into tb (a,b,c) select a,b,c from #tmpTop
4 楼zhangl_cn(和尚-修行)回复于 2006-03-07 20:18:32 得分 1
用TADOQuery组件的Batch模式:
adoquery.locktype:=ltBatchOptimistic;
adoquery.CacheSize:=1000;
提交到数据库用: adoquery.UpdateBatch;Top
5 楼net_morning(矿泉水)回复于 2006-03-07 21:26:59 得分 0
不做和尚的主意可看起来好像更好一些。
打算做成
for i := 1 to 10000 do
begin
adoqry.append
adoqry.fieldByName('filed1') := 'test'
end;
adoquery.UpdateBatch;
有个问题,adoquery.CacheSize:=1000;如果记录不足1000的话,update也能生效吗?Top
6 楼net_morning(矿泉水)回复于 2006-03-08 10:45:55 得分 0
selfupTop
7 楼Hank(星星农场)回复于 2006-03-08 11:04:12 得分 1
有两种方式
1、临时表模式
建立临时表,首先把数据保存到临时表中
通过 insert into 表 select * from 临时表 完成
2、批量SQL模式
insert into 表
select 数据一,数据二 union 数据一,数据二 ......
通过循环控制,一次关联100个数据,然后批量增加到数据库中
本质的原因是如果数据库有索引的时候,如果表很庞大,一旦增加一条记录就是一个庞大的量
当然,如果数据库和应用程序在同一台电脑上,那问题就太简单了,通过TSQL数万条记录一下搞定。Top
8 楼net_morning(矿泉水)回复于 2006-03-08 12:08:18 得分 0
用临时表,看来非得insert1000次不可,没有别的好办法了。
谢谢楼上朋友的解答Top
9 楼chijingde(AD)回复于 2006-03-08 12:17:04 得分 1
clientdataset有个AppendDatasetTop
10 楼duanhai(段海)回复于 2006-03-08 15:04:09 得分 2
在Sqlserver中,一條sql語句的最大長度為:8KB,
也就是說你的SQL語句只要在8KB以內,都可以正常
運行,當然前提條件是SQL語句合法:
而且在Sqlserver中,可以同時執行兩條以上的語句,
如:
AdoQuery1.Close;
AdoQuery1.SQL.Text:=
'insert into [TableName](IDNO)values(1)'
+ ' select max(IDNO) from [TableName]';
AdoQuery1.Open;
上面的語句執行可以得到一個結果集
所以你可以在你的語句中加入一條以上的insert語句
我記得我以前在本版寫過一篇關於批量數據插入,
速度比較的帖子,如果你有空,可以找找看:)
--------------------------------
如果我的說法對你有幫助,請您也幫我一個忙:
詳情請見:
http://community.csdn.net/Expert/topic/4598/4598070.xml?temp=.1748011
Top
11 楼VisualLion(狮子)回复于 2006-03-08 23:35:16 得分 1
可以使用TClientDataset,这个组件不一定非要用在三层结构Top
12 楼oushengfen(逸帆)回复于 2006-03-09 11:04:40 得分 1
批量功能,楼主都说得对啊。值得学习。Top




