Быстрая вставка реляционных (нормализованных) таблиц данных в базу данных SQL Server 2008


Я пытаюсь найти лучший и более быстрый способ вставки довольно большого количества данных (~50 тысяч строк), чем Linq, который я использую сейчас. Данные, которые я пытаюсь записать в локальную БД, находятся в списке ORM-сопоставленных данных, сериализованных и полученных из WCF. Я очень люблю использовать 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 2

1 ответ:

Я бы все равно использовал SqlBulkCopy, чтобы быстро скопировать ваши данные из внешнего файла в промежуточную таблицу , которая имеет ту же (плоскую) структуру, что и файл (вам нужно будет создать эту таблицу заранее)

Как только он загружен, вы можете разделить данные по нескольким таблицам, используя, например, хранимую процедуру или что - то еще-должно быть довольно быстро, так как все уже находится на сервере.