1
我有一个SQL表,其中有大约1亿行左右的SQL表,并且它的模式由EF迁移管理。在EF迁移中更新大量数据
我想更改链接到该表的枚举值,所以我需要将数据库中的所有值更新为新值。像下面的东西。
this.Sql("UPDATE MyTable SET MyEnum=0 WHERE MyEnum=-1");
这将是所有的好上一个较小的表,但因为表的大小它不是真的适合在一气呵成运行这样一个大的更新(我得到的连接超时,tempdb的空间问题,事务日志空间问题等)。分批做这件事情会更好。例如:
while(ctx.MyTable.Any(m =>m.MyEnum == -1))
{
this.Sql("UPDATE TOP (1000000) MyTable SET MyEnum=0 WHERE MyEnum=-1");
}
不幸的是我不能在迁移过程中摸出一个方式从表中读取(例如,如何可以在迁移过程中ctx.MyTable.Any(m =>m.MyEnum == -1)
做到这一点)。有没有办法做到这一点,以便我可以在EF迁移更新中进行批处理。
我已经在运行一个原始的SQL更新(根本不是EF),一个SP很容易出现同样的问题,因为它在超时时间内不会完成,并且在执行时会使用大量的log/tempdb空间。 – 2014-10-28 20:28:34