VB程序中从另一SQL服务器倒入数据表(15万条记录)到本地SQL服务器出现超时错误;(1)查看本地SQL服务器中的数据表,发现没有任何记录;(2)但是在查询分析器中同样的语句能正常执行,测试下来需35秒左右;(3)程序中command timeout 、 connect timeout超时均设置很长时间;语句如下:INSERT INTO ttjgxx SELECT * FROM OPENDATASOURCE ('SQLOLEDB','Data Source=testserver;User ID=sa;Password=123').jgxx.dbo.sajgxx

解决方案 »

  1.   

    选中Microsoft SQL Servers-->工具栏,工具-->选项-->高级-->查询超时-->改为0选中Microsoft SQL Servers-->工具栏,工具-->选项-->高级-->连接超时-->改为0
    ADONonnectionTimeout 连接时间长一点;
    CommandTimeout 执行时间长一点!
      

  2.   

    自定义存储过程执行也没用,有关数据库服务器之间复制表是不是有专门的系统存储过程提供,特别说明:上述语句是在性能一般的Win98机器上出现的问题,具体配置PIII550 128M,忘高手指点!
      

  3.   

    当数据表记录数少时,该段程序有效吗?
    另外,也可试试DTS服务.
      

  4.   

    up一下
    如何生成DTS包,如何用vb调用?
      

  5.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=20536
      

  6.   

    TO:arrow1971 (龙城之箭) 
        不必客气,举手之劳而已。对于这个问题,我想说的是,在大数据量的情况下,即使使用DTS,仍然可能会出现死机状况。MICROSOFT的DTS这个东东功能非常强大,但是稳定性并不见得好。我认为,导致死机的原因,是由于15万条记录一次导入,使得一个数据库事务(因为你使用一条SQL语句来完成此操作)过大。我这里没有什么特别好的建议,只能建议你用最笨的办法:在VB中开两个结果集对倒,每1000条记录COMMIT一次事务。这样,在用户能够忍受这种速度的情况下,稳定性应该是有保障的。即使在过程中出错,你的导入过程至少能够部分成功,只要你记录下出错点,还可以再来。
      

  7.   

    在SQL Server中直接使用XML我也不会,不过你可以在源数据库中建一个带for xml的读出数据的存储过程。然后用sqlcommand.ExecuteXmlReader方法读取,再写入新的数据库中。
      

  8.   

    试试在VB中循环执行下面的语句
    INSERT INTO ttjgxx SELECT TOP 1000 * FROM OPENDATASOURCE ('SQLOLEDB','Data Source=testserver;User ID=sa;Password=123').jgxx.dbo.sajgxx WHERE [ID] NOT IN(SELECT TOP 1000 * N [ID] FROM FROM OPENDATASOURCE ('SQLOLEDB','Data Source=testserver;User ID=sa;Password=123').jgxx.dbo.sajgxx)
    不用两个记录集对调,每次读1000条记录插入,再读后面的1000条。
      

  9.   

    先在SQL Server中链接(服务器),然后再写一个存储过程,这样会更快,但别忘记了事务处理啊!