SQL sever2000数据库,数据库和项目在两台机器上,入库操作是插入数据到数据库服务器上,一次的入库操作大概要20几万条记录,目前是用sql的insert语句,在程序里循环的插入数据。但是,最近在入库的时候,本来要入23万条记录的,结果实际插入表中的记录只有15万条,但是入库的操作却显示操作成功了。这是什么原因呢,以前都没有出现过这种问题呢。查了下论坛里的帖子,似乎是因为插入操作过于频繁,而且每一条操作都执行一个insert语句,没有写存储过程。本应20万的记录,变成了15万,数据丢失的原因是什么,应该怎么解决?请大家多多指教~

解决方案 »

  1.   

    循环插入23万次?肯定是没有判断INSERT操作结果-不管是否成功,程序员都当作成功了!
      

  2.   

    扯淡,呵
    代码一定有问题,比如失败也提示成功而巳
    既然二十多万条,就该用批量去处理<或许会有TRIGGER等逻辑吧,也可改为批量>
      

  3.   

    我写了一个测试用的存储过程:表test:包含字段name、age、sex。CREATE PROCEDURE proc_test
      @name varchar,
      @age int,  
      @sex varchar 
      AS
      insert into test00 values(@name,@age,@sex)
    GO然后在java中调用这个过程,来完成100万条记录的插入操作:
    try
       {
        conn = Conn.getConnection(EnpSellerMgr.class);//建立数据连接
        stmt = conn.createStatement();
        CallableStatement callsta; 
        String st="{call dbo.proc_test(?,?,?)}";  
        callsta=conn.prepareCall(st);  
    for(int i=1;i<=1000000;i++){
            callsta.setString(1,"hh");  
    callsta.setInt(2,18);
    callsta.setString(3,"f");
    callsta.execute();
    }
    callsta.close();
    }
       catch (Exception e) {
    e.printStackTrace();
        }finally {
    try {
    if (stmt != null)
    stmt.close();
    if (conn != null)
    Conn.freeConnection(conn);
    } catch (Exception localException1) {
    }
    }这个程序执行下来,当插入记录达到60多万条的时候,SQLSEVER2000就报object has been closed 。然后插入操作停止。
    请各位指教,到底怎么才能顺利的实现大量数据的插入呢??
      

  4.   

    建个测试表,TestTB(countNum int)。然后在每次执行insert语句时,update TestTB表下。countNum=+1 。
    用事务写。等执行完了。看看countNum是几