你用什么导呀?
DTS?

解决方案 »

  1.   

    代码比较多,就是select表中的数据,然后通过一定的比对条件循环append到另一个数据库中的表中,用的是ADO
      

  2.   

    代码比较多,就是select表中的数据,然后通过一定的比对条件循环append到另一个数据库中的表中,用的是ADO---这样肯定慢!既然是数据库之间的操作,为什么不用DTS?
      

  3.   

    还是用DTS或者是BCP工具吧,那样很快,直接用SQL语句倒数据就慢,至于是为什么,就不清楚了
      

  4.   

    谁能回答一下:
    还是用DTS或者是BCP工具吧,那样很快,直接用SQL语句倒数据就慢,至于是为什么,就不清楚了上面写的原因啊,谢谢
      

  5.   

    不是一个单纯的数据传输,是要通过一定的比对条件传输的,DTS或者是BCP工具,能作到吗?
      

  6.   

    dm_trans->Sql_Find->Close();
        dm_trans->Sql_Find->SQL->Clear();
        dm_trans->Sql_Find->SQL->Add("delete from "+tablename+" where c_trans='0' ");
        dm_trans->Sql_Find->ExecSQL();    AnsiString c_sql="select * from "+tablename+" where ";
        c_sql+="aae>='"+LastTime+"' and aae<='"+ThisTime+"'";    dm_trans->Query_Find->Close();
        dm_trans->Query_Find->SQL->Clear();
        dm_trans->Query_Find->SQL->Add(c_sql);
        dm_trans->Query_Find->Open();
        int count=dm_trans->Query_Find->RecordCount;
        Memo1->Lines->Add("共:"+IntToStr(count)+" 条需要传输数据 ");
        dm_trans->Query_Find->First();
        int trans_count=0;    ProgressBar1->Max=count;
        ProgressBar1->Position=0;
        int progress_count=0;    dm_trans->Sql_Find->Close();
        dm_trans->Sql_Find->SQL->Clear();
        dm_trans->Sql_Find->SQL->Add("select * from "+tablename+" where 1=0 ");
        dm_trans->Sql_Find->Open();
        int ColCount=field_count;    while (!dm_trans->Query_Find->Eof)
        {
            try{
                try{
                    dm_trans->Sql_Find->Append();
                    for(int j=0;j<ColCount;j++)
                    {
                        dm_trans->Sql_Find->Fields->Fields[j]->Value=dm_trans->Query_Find->Fields->Fields[j]->Value;
                    }
                    dm_trans->Sql_Find->Post();                trans_count++;
                }
                catch(Exception& e)
                {
                    Memo1->Lines->Add("传输:"+tablename+" 数据发生错误:"+e.Message);
                }
            }
            __finally
            {
                dm_trans->Query_Find->Next();
                progress_count++;
                ProgressBar1->Position=progress_count;
            }
        }    Memo1->Lines->Add("成功完成:"+IntToStr(trans_count)+" 条数据 ");
    }
    catch(Exception& e)
    {
        Memo1->Lines->Add("读取表:"+tablename+" 发生错误:"+e.Message);
    }
      

  7.   

    对C#我不懂,只能大致给你提供下思路。如果是大数据导出最好用BCP,可以带WHERE条件的。如果你不用BCP,那么最好能分段导出,每段是一个事物,不要把所有导出作为一个事物(这样会需要大量的内存)。
    BCP语法:
    master..xp_cmdshell 'bcp "sselect * from tbname where condition " queryout "c:\filename" -c -q -Sserver -Uuid -Ppwd'
    master..xp_cmdshell 'bcp "database_name.][owner].]{table_name" queryin "c:\filename" -c -q -Sserver -Uuid -Ppwd'
      

  8.   

    SQL中大数据的转移基本上就是DTS 比较而言 BCP占用资源低 效率高 但是因为是命令行工具 使用起来不是很方便
    你的程序我看不懂:(
      

  9.   

    针对你的数据推荐的方法:
    1. DTS   方便可以在程序中控制
    2. SQL发布和复制,简单非常方便的GUI操作
      

  10.   

    用SQL的数据导入导出工具
    用程序,每次导入的数据库,用条件,每次打开的记录数不要太大
      

  11.   

    楼主给出的逻辑并不复杂:
    1.先删除Table中 c_trans='0' 的数据;
    2.取出 aae>={LastTime} and aae<={ThisTime} 的数据插入到Table中;建议使用DTS,第一步用一个"执行SQL任务",第二步用一个"数据传输任务"就可以了.
      

  12.   

    又测试了2次,发现SQL SERVER占用的内存很大,多的时候有7、8百M,为什么呢?
      

  13.   

    如果你的物理内存有1G+  SQL此时占用7,8百M的内存是正常的情况 SQL会平衡系统所需的内存 将余下的内存用到只剩下5-10M也是正常的 在没有内存压力的情况下SQL会把查询内容保存在内存中以供下次使用。
      

  14.   

    但是有时会报内存不足的错误啊,可否在不影响正常处理工作的情况下,限制SQL占用的内存?
      

  15.   

    其实SQL SERVER就是一个比较吃内存的程序,他会把用到过的所有数据都放到内存中,然后给他设上一个计数器,过一段时间,扫一次内存,然后当内存不够时,把计数器值最小的给清出去。我建议还是使用BCP来导数据库。因为DTS导的时候内存和使用和日志的记录量也不小。没有试过,只是建议主。
      

  16.   

    限制内存当然可以 在Enterprise Manager里面操作
    它具体报错信息是什么?
      

  17.   

    开始处理时: begin transaction T1
    当处理的数据量达到整万时: commit transaction T1    begin transaction T1
    结束时 commit transaction T1 
    试试。这是一种思路而已。