4

我有一个包含大约185k行的二进制文件。C#在几秒钟内解析文件。MSSQL用该数据更新表的最佳方法是什么?

我试过的:

  1. 最简单的方法 - 读取二进制行,解析,更新表。整个过程大约需要 2 天时间来更新所有数据。
  2. 合并 200 个更新查询并立即将它们发送到 MSSQL。在这种情况下,更新需要 8 到 10 小时。
  3. 将 500 多个查询合并为一个。工作速度更快,但不时会丢弃超时异常,因此某些更新不会通过。

关于如何加快更新过程的任何建议?

4

3 回答 3

2

不确定您是否真的想通过 C# 执行此操作:可能想要使用BULK INSERT并为其提供一个数据格式正确的文件。

于 2012-09-06T03:42:04.023 回答
1

我会尝试表值参数:

http://www.codeproject.com/Articles/22392/SQL-Server-2008-Table-Valued-Parameters

于 2012-09-06T04:02:45.760 回答
1

使用SqlBulkCopy(到临时表)后跟MERGE.

大容量复制方法可以使用来自 .NET 客户端的“推送”来有效地传输数据。使用BULK INSERT需要从服务器“拉”(以及所需的本地文件访问)。

然后该MERGE命令(在 SQL Server 2008+ 中)可用于根据所需规则将临时表中的数据插入/更新/更新插入到目标表中。由于此时数据完全在数据库中,因此此操作将尽可能快。使用MERGE 也可能导致优于许多单独命令的性能优势,甚至是同一事务中的那些。

也可以看看:

于 2012-09-11T22:54:38.327 回答