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