我可以在c# .net中实际使用多大的SQL字符串(用于大规模更新)?
本文关键字:字符串 SQL 用于 大规模 更新 net 我可以 | 更新日期: 2023-09-27 18:07:32
我正在接收和解析一个大文本文件。
在该文件中,我有一个数字ID,用于标识表中的一行,以及我需要更新的另一个字段。
ID Current Location
=========================
1 Boston
2 Cambridge
3 Idaho
我正在考虑创建一个单一的SQL命令字符串,并使用ADO发射。Net,但是我将要接收的一些文件有数千行。这是可行的还是有我没看到的极限?
如果您可能有数千行,那么组合SQL语句绝对不是的方法。更好的基于代码的替代方案包括:
-
使用SQLBulkCopy将更改数据插入到staging表中,然后使用staging表作为源更新目标表。它还具有出色的批处理选项(与其他选项不同)
-
编写一个存储过程来执行Update,该过程接受包含Update数据的XML参数
-
编写一个存储过程来执行Update,该存储过程接受包含Update数据的表值参数
我自己没有比较过它们,但我的理解是#3通常是最快的(尽管#1对于几乎任何需要都足够快)。
写一个大的INSERT语句会非常慢。您也不希望一次解析整个大文件。你需要做的是这样做:
- 找出一个好的块大小。我们叫它
chunk_size
。这将是一次从文件中读取的记录数。 - 从文件中加载
chunk_size
条记录到DataTable。 - 使用SQLBulkCopy将数据表插入数据库
- 重复2 &3直到文件完成。
你必须尝试找到chunk_size
的最佳大小,所以从小的开始,然后逐渐增加。
我不确定实际的限制,如果存在的话,但是为什么不把您觉得舒服的"一小块"文件分成几个命令呢?如果重要的是它们都失败或成功,您可以将其封装在单个事务中。
比如一次抓取250行,或者别的什么