Q:用C#写个小程序,有两个数据库,A1,A2,现在A1的50张表中有上百万条数据,A2中相对的50张表用truncate table清空,然后将A1的50张表的数据逐表插入到A2的50张表中.有一张表数据就达90多万条,单独插入时还是提示“运行超时”。问下高手,这样情况如何解决呢?
A:把超时时间设长 SQL菜单——》工具——》选项 查询超时 选项 改为0。
多线程+分段;
做到导入导出数据包吧 ssis执行包。。程序调用;
SqlCommand类的默认超时是30秒,你需要修改那个CommandTimeout属性才行。
另外如果你是数据库直接可以直接访问的话,通过链接服务器来操作会更好,直接在数据库里面执行了。
用SQLDBCOPY对象,设定好timeout超时间隔!
导入导出工具:tollin 下的dtswiz.exe直接搞定。2005取消了这个工具,所以在05目录下是没有的。sqlserver2000下有;
写代码的话你必须用存储过程,建索引。。。效率差的不止一点。想在代码中sqlcommand搞定。不用想啦。我测过800m的文本,存储过程+索引 比纯sql代码效率快很多
SqlBulkCopy,每秒两万到三万。流形式。
SqlBulkCopy大数据量时超时解决办法
异常详细信息: System.Data.SqlClient.SqlException: 超时时间已到。在操作完成之前超时时间已过或服务器未响应。
解决的办法:微软已经给出了解决办法了。只需要按照如下表下载相应的补丁在服务器上安装即可。
对于基于 x86 的计算机
http://download.microsoft.com/download/2/C/5/2C5BCDC9-3241-443A-9F96-4E0B0EDFA727/NDP20-KB916002-X86.exe
对于基于 x64 的计算机
对于基于 Itanium 的计算机
因为公司客户的服务器不允许随便打补丁,最后,只能改用分批处理数据的方法来处理了,还好一样可以解决问题。
自己用BCP解决了。