2011-09-29 55 views
0

的我在一個SQL Server表中的大量行。我需要選擇所有這些行併爲每個行運行更新查詢。我需要知道什麼是最好的選項的做法,從以下更新大量的行

  1. 運行SELECT查詢,並得到一個DataTable,並使用下面的代碼在應用

    的foreach(在DataTable.Rows DataRow的項目) 在數據庫中的水平{ //執行更新 }

  2. 使用存儲的過程中,選擇在該組數據和使用SQL Server光標來執行更新

+4

爲什麼你需要的時候做更新一排?基於集合的解決方案可能效率更高。 –

+1

你如何改變數據?這兩種選擇都可能非常緩慢。但根據變化,有更好的選擇。 –

+2

使用**選項3 **:在SQL中使用基於集合的** UPDATE語句。絕對不需要將數據下載到客戶端以進行更新(選項1),並且在服務器上更新時,您應該避免使用遊標** - 速度很慢,很醜,在99%的情況下不需要無論如何......還有:你在說多少行?數百?成千上萬的?百萬? –

回答

2

選項1比選項2,您需要與斷開連接的數據集VS連接數據讀取器工作。

如這裏所討論的其他時間在SO實際上這意味着更多的存儲器需要在一旦在客戶端上Vs的連接保持打開更長,而在結果循環更經常發送的數據的較小的塊。由於你的主要焦點是數據更新,我認爲這兩個選項可能都是相似的,如果你有很多記錄,我可能會用第二個記錄,使用datareader,而不必一次加載數據集中的所有記錄。

正如其他人已經指出的最好的演出將有一組基於更新存儲過程,你會通過某些參數,所有記錄都在一次一起自動更新來實現。或者看看SqlBulk更新。

0

我也有一個建議

foreach(DataRow item in DataTable.Rows) { 
    //perform update 
} 

在這裏你可以使用LINQ是.so它可以給快速響應

0

像馬克已經評論,去選項3,做一套,如果在基於更新所有可能的(通常是)。如果你認爲它不是,也許你可以問一個單獨的問題,如何做到這一點。細節越多,你會給越好提出的解決方案將滿足您的情況