一个二维数组,一万五千行左右。
把它写入到一个空表中,表的列数和二维数组的列数一样。
要求:用最少的时间插入

解决方案 »

  1.   

    for ( int i=0;i<10;i++ )
      for ( int j =0;j<10;j++)
      {
         insert into (b01,b02,...b0j) values(A[i][0],A[i][1],A[i][j]);
       }
    我觉得这样应该可以阿,一万五千行不用多线程吧,那么麻烦
      

  2.   

    “插入表”,数据库的表么?
    可以试试ADO的BatchUpdate方法,会比一条条sql语句执行的快很多。
      

  3.   

    to : zurich1979(笨得可以) 
    for ( int i=0;i<10;i++ )
      for ( int j =0;j<10;j++)
      {
         insert into (b01,b02,...b0j) values(A[i][0],A[i][1],A[i][j]);
       }
    我觉得这样应该可以阿,一万五千行不用多线程吧,那么麻烦你的这种方法要访问数据库一万五千次,如果机子的性能不高的话那将要八分钟左右,很慢的。
      

  4.   

    to :LG0927() 
    该怎么写存储过程呢
    "insert into (b01,b02,...b0j) values(A[i][0],A[i][1],A[i][j]);
    "
    是这样吗,那也很慢啊!
      

  5.   

    我也一直在找可以将一个数据集直接传回到后台的方法,不用产生1万5千条insert into……的语句。想一下,相当于多传了1.5万*30字节,要可以只传values后的内容就好了,节约了网络资源啊。游标可以传到前台来,但前台如何传一个游标到后台呢?
      

  6.   

    未经测试
    var
    a:array[i,j] of integer;
    row,list:integer;
    str:string;
    begin
    str:='';
        for row:=1 to i do
             begin
               for list:=1 to j do
               str:=str+strlist[j]+',';
              end;
         str:=copy(str,1,length(str)-1);
    with adoquery1  do
        begin
           close; 
           sql.clear;
           sql.add('select '''+str+''' into 表名');
           execsql;
         end;
    end;
      

  7.   

    先插入一临时表,再插入正式表,使用sql语句要好些
      

  8.   

    再转的话就使用insert into正式表 select * from 临时表
    道理和插入正式表一样的
    可以使用stringlist变成一唯的,在插入表中
      

  9.   

    to: 楼上
    使用stringlist,和直接insert into有什么区别呢?
    会让速度快吗?
      

  10.   

    用存储过程吧,比在Delphi直接用sql语句要快N倍。
    如果可能,把数据放到存储过程里去分析,就更快了!
      

  11.   

    to :birdhaha(haha) 
    这样子的存储过程该如何写啊!