Быстрая вставка реляционных (нормализованных) таблиц данных в базу данных 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 ответ:
Я бы все равно использовал
SqlBulkCopy
, чтобы быстро скопировать ваши данные из внешнего файла в промежуточную таблицу , которая имеет ту же (плоскую) структуру, что и файл (вам нужно будет создать эту таблицу заранее)Как только он загружен, вы можете разделить данные по нескольким таблицам, используя, например, хранимую процедуру или что - то еще-должно быть довольно быстро, так как все уже находится на сервере.