1

大家好我有一個有趣的任務來更新大約200萬行的表中的單個列。我試着用MVC實體框架來做這件事,但是我遇到了「內存不足的例外」,我只是想知道是否有另一種方法。擁有200萬行的批量更新表

有趣的部分是,它不只是一個簡單的更新。該過程需要讀取表中已有的TelephoneNumber列,例如可以是014812001。然後它需要基於大於1的出現次數來計算該數字的分數。因此,例如使用上述數字,這將得到6,因爲我們有3×1和3×0,總共給出6.

一旦這個分數已經被計算出來,這個數字需要被插入到當前行中的一列中進行處理,所以在我們的例子中這一行是TelephoneNumber = 014812001

這是可能使用TSQL還是更好地繼續我的實體框架方法?

+0

莫非你至少供應索姆你試圖做什麼和發生內存不足異常的EF代碼? –

+0

嗯.....根據我的有限數學,這個數字'014812001'完全** 3密碼大於1的密碼** - 有一個'4','8'和'2' .. 。你如何得到這個分數爲6的值? –

回答

2

對於這樣的批量更新,我會總是建議在服務器上這樣做 - 有真正拖跌2萬行,更新一列,然後再推動這些回服務器沒有一點.. ...

我想根據你的描述,創建一個T-SQL用戶定義函數來計算這個分數應該相當簡單。一旦你有,你可以發出一個單一的T-SQL語句:

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

這應該是更快的數量級比你的實體框架的做法幾個數量級....

+0

歡呼的想法,這工作了一種享受:) –