2010-06-09 87 views
2

我試圖找到一種更好更快的方式來插入比我現在使用的Linq大量的數據(〜50K行)。 我試圖寫入本地數據庫的數據位於從WCF序列化並接收到的ORM映射數據列表中。 我很喜歡使用SqlBulkCopy,但問題是這些表是規範化的,實際上是一個具有一對多關係的序列或互連表。將關係數據錶快速插入到SQL Server 2008數據庫中

下面是一些代碼,說明我的觀點:

foreach (var meeting in meetingsList) 
    { 
     int meetingId = dbAccess.InsertM(value1, value2...); 
     foreach (var competition in meeting.COMPETITIONs) 
     { 
       int competitionId = dbAccess.InsertC(meetingid, value1, value2...); 
       foreach(var competitor in competition.COMPETITORs) 
       { 
         int competitorId = dbAccess.InsertCO(comeetitionId, value1,....) 
         // and so on 
       } 
     } 
    } 

其中dbAccess.InsertMeeting看起來是這樣的:

// check if meeting exists 
int meetingId = GetMeeting(meeting, date); 

if (meetingId == 0) 
{ 
    // if meeting doesn't exist insert new 
    var m = new MEETING 
    { 
     NAME = name, 
     DATE = date 
    } 
    _db.InsertOnSubmit(m); 
    _db.SubmitChanges(); 
} 

感謝您事先的任何答案。 博揚

回答

4

我仍然會用SqlBulkCopy迅速從外部文件中複製數據到一個臨時表具有相同的(平面)結構的文件(你需要提前創建該表)

加載之後,可以使用例如多個表來拆分數據一個存儲過程或其他東西 - 應該是相當快的,因爲一切都已經在服務器上了。

+4

+1我總是使用臨時表第一方..總是有第三方數據的問題,它需要清洗 – SQLMenace 2010-06-09 13:58:42

+0

這是一個有趣的想法...我會試試看,謝謝 – TheBoyan 2010-06-09 13:59:02

+1

你可以得到ID使用OUTPUT clausue從父表插入返回,請閱讀聯機叢書中的內容。 – HLGEM 2010-06-09 14:50:54

相關問題