我正在接收和解析一个大文本文件。
在该文件中,我有一个数字 ID,用于标识表中的一行,以及另一个需要更新的字段。
ID Current Location
=========================
1 Boston
2 Cambridge
3 Idaho
我正在考虑创建一个 SQL 命令字符串并使用 ADO.Net 将其关闭,但是我将收到的其中一些文件有数千行。这是可行的还是有我没有看到的限制?
我正在接收和解析一个大文本文件。
在该文件中,我有一个数字 ID,用于标识表中的一行,以及另一个需要更新的字段。
ID Current Location
=========================
1 Boston
2 Cambridge
3 Idaho
我正在考虑创建一个 SQL 命令字符串并使用 ADO.Net 将其关闭,但是我将收到的其中一些文件有数千行。这是可行的还是有我没有看到的限制?
如果您可能有数千行,那么编写 SQL 语句绝对不是要走的路。更好的基于代码的替代方案包括:
使用 SQLBulkCopy 将更改数据插入临时表,然后使用临时表作为源更新目标表。它还具有出色的批处理选项(与其他选项不同)
编写一个存储过程来执行更新,该过程接受一个包含更新数据的 XML 参数。
编写一个存储过程来执行接受包含更新数据的表值参数的更新。
我自己没有比较它们,但我的理解是#3通常是最快的(尽管#1对于几乎任何需要来说都足够快)。
编写一个巨大的 INSERT 语句非常慢。您也不想一次解析整个海量文件。您需要做的是以下方面的事情:
chunk_size
。这将是您一次从文件中读取的记录数。chunk_size
到 DataTable 中。您必须进行试验才能找到最佳尺寸,chunk_size
因此从小处着手并逐步提高。
我不确定一个实际的限制,如果存在的话,但为什么不把你觉得舒服的“一口大小”的文件块分成几个命令呢?如果它们都失败或成功很重要,你总是可以将它包装在一个事务中。
说一次抓取 250 行,或者其他什么。