我可以在c# .net中实际使用多大的SQL字符串(用于大规模更新)?

本文关键字:字符串 SQL 用于 大规模 更新 net 我可以 | 更新日期: 2023-09-27 18:07:32

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

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

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

我正在考虑创建一个单一的SQL命令字符串,并使用ADO发射。Net,但是我将要接收的一些文件有数千行。这是可行的还是有我没看到的极限?

我可以在c# .net中实际使用多大的SQL字符串(用于大规模更新)?

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

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

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

  3. 编写一个存储过程来执行Update,该存储过程接受包含Update数据的表值参数

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

写一个大的INSERT语句会非常慢。您也不希望一次解析整个大文件。你需要做的是这样做:

  1. 找出一个好的块大小。我们叫它chunk_size。这将是一次从文件中读取的记录数。
  2. 从文件中加载chunk_size条记录到DataTable。
  3. 使用SQLBulkCopy将数据表插入数据库
  4. 重复2 &3直到文件完成。

你必须尝试找到chunk_size的最佳大小,所以从小的开始,然后逐渐增加。

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

比如一次抓取250行,或者别的什么