3

我正在接收和解析一个大文本文件。

在该文件中,我有一个数字 ID,用于标识表中的一行,以及另一个需要更新的字段。

ID       Current Location
=========================
1        Boston
2        Cambridge
3        Idaho

我正在考虑创建一个 SQL 命令字符串并使用 ADO.Net 将其关闭,但是我将收到的其中一些文件有数千行。这是可行的还是有我没有看到的限制?

4

3 回答 3

3

如果您可能有数千行,那么编写 SQL 语句绝对不是要走的路。更好的基于代码的替代方案包括:

  1. 使用 SQLBulkCopy 将更改数据插入临时表,然后使用临时表作为源更新目标表。它还具有出色的批处理选项(与其他选项不同)

  2. 编写一个存储过程来执行更新,该过程接受一个包含更新数据的 XML 参数。

  3. 编写一个存储过程来执行接受包含更新数据的表值参数的更新。

我自己没有比较它们,但我的理解是#3通常是最快的(尽管#1对于几乎任何需要来说都足够快)。

于 2013-04-05T19:46:31.403 回答
1

编写一个巨大的 INSERT 语句非常慢。您也不想一次解析整个海量文件。您需要做的是以下方面的事情:

  1. 找出一个好的块大小。让我们称之为chunk_size。这将是您一次从文件中读取的记录数。
  2. 将文件中的记录数加载chunk_size到 DataTable 中。
  3. 使用SQLBulkCopy将 DataTable 插入 DB。
  4. 重复 2 & 3 直到文件完成。

您必须进行试验才能找到最佳尺寸,chunk_size因此从小处着手并逐步提高。

于 2013-04-05T19:58:20.303 回答
-1

我不确定一个实际的限制,如果存在的话,但为什么不把你觉得舒服的“一口大小”的文件块分成几个命令呢?如果它们都失败或成功很重要,你总是可以将它包装在一个事务中。

说一次抓取 250 行,或者其他什么。

于 2013-04-05T19:48:38.883 回答