2017-03-04 95 views
1

我想知道将数据插入到Sql Server数据库的最快方式是什么。 目前我使用“INSERT”命令使用SqlCommand,但它需要很多时间,因为我必须插入很多像500k这样的行。 你能告诉我什么是我最好的解决方案吗? 我也读过,我可以使用SqlBulkCopy,你认为这可能是一个很好的解决方案?使用C#将数据插入到Sql Server数据库的最快方法。

+0

尝试使用实体框架并使用模型传递数据https://msdn.microsoft.com/en-us/library/bb386876(v=vs.110).aspx – Thili77

+0

你的代码是什么样的? “很多”是多少时间? –

+0

可能来自http://stackoverflow.com/questions/5940225/fastest-way-of-inserting-in-entity-framework – Xavave

回答

1

如果你在谈论常规“编程”数据导入,SqlBulkCopy是我的经验,要走的路。否则,服务器本身的数据库管理技巧可能更适合。

的Microsoft SQL Server包含一个名为BCP 快速批量复制大文件到SQL Server数据库表或视图一个流行的命令行工具。 SqlBulkCopy类允许您编写提供类似功能的托管 代码解决方案。还有其他 将数据加载到SQL Server表中的方法(INSERT语句,对于 示例),但SqlBulkCopy对它们提供了显着的性能优势 。

我曾经为我们工作过的一个地方,我们曾经每天导入和合并大约一百万条记录。我们使用了SqlBulkCopy和存储过程的组合。批量复制将导入到“scratch”表中,存储过程将执行INSERT INTO SELECTUPDATE SELECT (SO has questions with good examples)合并数据。整个事情过去不到一分钟(也许是两分钟)。

使用SQL,您可以将信息从一个表复制到另一个表中。 INSERT INTO SELECT语句从一个表中复制数据并将其插入现有表中。

我发现BulkCopy很难维护,但性能上的好处使得它可以承受。另外,如果您有单独的表(与DataTable匹配)来接收导入,则管理起来更容易。

+0

我试过用SqlBulkCopy,它工作得很好。我有一个问题,如果我通过SqlBulkCopy添加行,是否必须选择数据并将数据与新行合并,或者WriteToServer()函数是否自动合并数据? – Antonio

+0

WriteToServer()不合并数据AFAIK。我建议的解决方案是,在批量导入之后,您运行特定于数据的INSERT INTO SELECT或UPDATE SELECT WHERE语句,例如,仅更新具有特定字段或时间戳的不同值的行。 – ziya

+0

刚刚通过指向UPDATE SELECT语句的链接编辑答案。只记得那是我们用来合并数据的东西。 – ziya

0

在使用SQLBulkCopy之前,请确保您要插入的表上的所有非聚集索引都应该被删除,然后重新创建它,这对您的情况会更快。

相关问题