更新大量行

时间:2011-09-29 06:15:56

标签: asp.net sql-server

我在SQL Server表中有大量行。我需要选择所有这些行并为每个行运行更新查询。我需要知道以下

中最好的选择是什么
  1. 运行select查询并获取DataTable并在应用程序中使用以下代码

    foreach(DataTable.Rows中的DataRow项) { //执行更新 }

  2. 在数据库级别使用存储过程,选择数据集并使用SQL Server游标执行更新

3 个答案:

答案 0 :(得分:2)

选项1与选项2意味着您使用断开连接的数据集与连接的数据读取器。

正如在SO中所讨论的其他时间实际上,这意味着客户端上一次需要更多内存,而连接保持打开时间更长,并且在循环结果时更频繁地传输更少的数据块。由于您主要关注数据的更新,我认为两个选项可能都很相似,如果您有很多记录,我可能会使用datareader,而不必在数据集中一次加载所有这些记录。

正如其他人已经指出的那样,使用基于集合的更新存储过程可以实现最佳性能,您可以向其传递某些参数,并且所有记录都会立即进行原子更新。或者也看看SqlBulk更新。

答案 1 :(得分:0)

我还有一个建议

foreach(DataRow item in DataTable.Rows) { 
    //perform update 
} 

这里你可以使用LINQ。它可以提供快速响应

答案 2 :(得分:0)

就像Marc已经评论过的那样,请选择选项3,并在可能的情况下进行基于集合的更新(通常是这样)。如果您认为不是,也许您可​​以就如何做到这一点提出单独的问题。您将提供的具体内容越多,建议的解决方案越适合您的情况