批量更新表,包含200万行

时间:2011-09-09 16:08:27

标签: tsql sql-server-2008 asp.net-mvc-3 c#-4.0 entity-framework-4

大家好我有一个有趣的任务来更新一个大约有200万行的表中的单个列。我尝试过使用MVC实体框架,但是我遇到了“内存不足异常”,我只是想知道是否还有其他方法。

有趣的是,它不仅仅是一个简单的更新。该过程需要阅读表中已有的TelephoneNumber列,例如,这可能是014812001。然后它需要根据大于1的出现次数计算这个数字的得分。因此,例如使用上面的数字,这将得到6,因为我们有3 x 1和3 x 0得到总数为6。 p>

计算完这个分数后,需要将此数字插入到当前行的a列中进行处理,因此在我们的例子中,该行包含TelephoneNumber = 014812001

这可能是使用TSQL还是继续我的实体框架方法更好?

1 个答案:

答案 0 :(得分:2)

对于这样的批量更新,我会总是建议在服务器上执行此操作 - 拖下200万行,更新单个列,然后将其推回到服务器再次.....

我认为根据您的描述,创建一个可以计算此分数的小T-SQL用户定义函数应该相当简单。完成后,您可以发出一个T-SQL语句:

UPDATE dbo.YourTable
SET Score = dbo.fnCalculateScore(TelephoneNumber)
WHERE .... (whatever condition you might have) .....

这应该比你的实体框架方法快几个数量级......