我在SQL Server表中有大量行。我需要选择所有这些行并为每个行运行更新查询。我需要知道以下
中最好的选择是什么运行select查询并获取DataTable并在应用程序中使用以下代码
foreach(DataTable.Rows中的DataRow项) { //执行更新 }
在数据库级别使用存储过程,选择数据集并使用SQL Server游标执行更新
答案 0 :(得分:2)
选项1与选项2意味着您使用断开连接的数据集与连接的数据读取器。
正如在SO中所讨论的其他时间实际上,这意味着客户端上一次需要更多内存,而连接保持打开时间更长,并且在循环结果时更频繁地传输更少的数据块。由于您主要关注数据的更新,我认为两个选项可能都很相似,如果您有很多记录,我可能会使用datareader,而不必在数据集中一次加载所有这些记录。
正如其他人已经指出的那样,使用基于集合的更新存储过程可以实现最佳性能,您可以向其传递某些参数,并且所有记录都会立即进行原子更新。或者也看看SqlBulk更新。
答案 1 :(得分:0)
我还有一个建议
foreach(DataRow item in DataTable.Rows) {
//perform update
}
这里你可以使用LINQ。它可以提供快速响应
答案 2 :(得分:0)
就像Marc已经评论过的那样,请选择选项3,并在可能的情况下进行基于集合的更新(通常是这样)。如果您认为不是,也许您可以就如何做到这一点提出单独的问题。您将提供的具体内容越多,建议的解决方案越适合您的情况