我可以使用一些建议/想法。 我写了一个控制台应用程序,用于查询MS Access中一个表格中的所有数据(我知道,但是我继承了它)到一个SQL表格。它每天早上作为计划任务运行。两个表格之间的字段不相同。目前,我从MS Access表中选择所有数据,遍历数据集并将每行插入到SQL表中。我也在这个过程中写了一个快速的日志文件。它有效,但速度并不快。我将不胜感激您的任何想法,您可能必须改进此过程。 谢谢!复制SQL数据的最快方法
回答
这是方式不是个别insert
语句更快。
您必须为主键增加自己的标识字段值。要做到这一点,首先抢你离开的最后一个标识字段值:
select top 1 id_customer from customers order by id_customer desc
然后通过你的DataSet
增加的int
变量,你循环。
或者您也可以使用GUID for primary key column。使用SqlBulkCopy的
示例代码:
public static void BulkLoadDataTable(DataTable table, string destinationTable)
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(_connectionString))
{
bulkCopy.BulkCopyTimeout = 1200;
bulkCopy.DestinationTableName = destinationTable;
bulkCopy.WriteToServer(table);
}
}
强类型数据表:
using System;
using System.Data;
public class CustomersDataTable : DataTable
{
public CustomersDataTable() : base()
{
base.TableName = "Customers";
Columns.Add(new DataColumn("id_customer", typeof(int)));
Columns.Add(new DataColumn("first_name", typeof(string)));
Columns.Add(new DataColumn("last_name", typeof(string)));
Columns.Add(new DataColumn("active", typeof(bool)));
}
}
你看着SSIS包?我会先看看。如果您没有访问权限,请查看此处提到的SqlBulkCopy类。
你也可以使用SELECT statement with an INSERT看看。
使用INSERT的SELECT语句会很慢。 – JohnB 2010-07-01 20:02:19
是的,但它仍然比单个插入更快。这将是我的最后一个选择,但我想我会介绍这个选项。 SSIS将是我认为的方式。 – knight0323 2010-07-01 20:39:27
为什么在SELECT语句中使用INSERT进行批量插入会很慢? – 2010-07-01 23:42:05
- 1. SQL 2005 - 快速复制数据库+数据的快速方法
- 2. 复制对象的最快方法
- 3. 复制postgresql数据库的更快方法(或最好的方法)
- 4. 复制数据库的最佳方法(SQL Server 2008)
- 5. T-SQL:复制层次结构数据的最佳方法?
- 6. 创建Sql Server数据库夜间复制的最佳方法
- 7. VBA:最快的方式来复制和数据
- 8. 将矢量内容复制到数组中的最快方法?
- 9. 更新数据表的最快方法
- 10. 查询数据帧的最快方法
- 11. 加载数据的最快方法
- 12. 从两个mysql数据库复制数据的最佳方法
- 13. 在SQL Server表中序列化数据集的最快方法
- 14. 实现SQL Server数据库 - 查找值的最快方法
- 15. 将Excel表格数据传输到SQL 2008R2最快的方法
- 16. 在SQL Server中更改列数据类型的最快方法
- 17. 在Java对象之间复制数据的最快方法是什么?
- 18. 将所有领域数据复制到JS对象的最快方法?
- 19. C++ - 将数据复制到2个不同线程的最快/可靠方法
- 20. 将6000表和数据从sqlserver复制到oracle ==>最快的方法?
- 21. 复制图像数据的更快速的方法
- 22. 回滚SQL数据的最快方法是:开发数据修改存储过程的最佳方法
- 23. 快速复制大型数据库表的方法
- 24. C#将数据插入SQL数据库的最快方式
- 25. 重复MySQL记录的最快方法
- 26. 反复插入行的最快方法?
- 27. 最佳/最快的方式对大量RTF数据到一个RichTextBox复制?
- 28. Apache Spark - 使用SQL的最快方法?
- 29. SQL - 最快的方法来更新
- 30. 复制不支持复制功能的动态对象的最快方法
创建自己的主键只有在插入数百万条记录的极端情况下才需要。但是我同意John的观点,即SqlBulkCopy是最好的选择。 – Doug 2010-07-01 16:39:29
看起来像BulkCopyClass是要走的路。但是,当字段属性不匹配会发生什么?例如,访问中的字符串字段和SQL中的布尔字段。 – gnome 2010-07-01 16:54:04
那么你可以遍历你的数据并按照你想要的方式在SQL Server中建立一个'DataTable',也就是'bool'的'bit'列。 SQL Server应该能够将非类型化的DataTable中的数据点转换为模式中适当的类型,但是我个人会创建一个**强类型的DataTable **(见上文)。你也可以写出一个.CSV和批量复制。在代码中循环执行所有这些工作将花费相对较少的时间。主要的观点是1000个单独的'insert'语句会浪费**吨的时间! – JohnB 2010-07-01 17:13:23