快速将关系(规范化)数据表插入SQL Server 2008数据库

时间:2010-06-09 13:54:40

标签: c# performance linq-to-sql sql-server-2008 sqlbulkcopy

我正在尝试找到一种比我现在使用的Linq更好更快的方法来插入相当大量的数据(~50K行)。 我正在尝试写入本地数据库的数据位于从WCF序列化和接收的ORM映射数据列表中。 我热衷于使用SqlBulkCopy,但问题是表是规范化的,实际上是具有一对多关系的序列或互连表。

这里有一些代码说明了我的观点:

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();
}

提前感谢您的回答。 博

1 个答案:

答案 0 :(得分:4)

我仍然会使用SqlBulkCopy将您的数据从外部文件快速复制到与文件具有相同(平面)结构的临时表中(您需要创建)那张桌子提前)

加载后,您可以使用例如多个表格分割数据。存储过程或其他东西 - 应该非常快,因为服务器上的所有东西都已经存在。