我想自今年年初標誌列,對於所有的值設置爲1,更新SQL Server中的表:如何將更新分塊到SQL Server?
TABLE
DATE ID FLAG (more columns...)
2016/01/01 1 0 ...
2016/01/01 2 0 ...
2016/01/02 3 0 ...
2016/01/02 4 0 ...
(etc)
問題是,這個表包含數以億計的記錄,我已經被建議每次更新100,000行更新以避免阻塞其他進程。
我需要記住我更新哪些行,因爲有一些後臺進程會在FLAG處理完成後立即將FLAG翻轉回0。
有沒有人有如何做到這一點的建議? 每天的數據都有超過一百萬條記錄,所以我不能簡單地使用DATE作爲計數器來循環。我正在考慮使用ID
這個過程會在單獨的事務中更新嗎?還是會阻塞,直到整個循環完成? –
@JinKim - 循環中的每個「UPDATE」語句執行都是它自己的事務。如果你想阻止,直到整個事情完成,你可以把它包裝在一個交易中,但正如我理解你的原始問題,這是你想要避免的。 – Igor
就像一點,如果WHILE循環因任何原因(服務器崩潰或任何其他問題)崩潰,您將失去更新記錄的軌道。 – FLICKER