У меня есть ситуация, в которой файл CSV загружается в мое приложение, и каждую строку необходимо поместить в базу данных. Я читаю каждую строку и строю таблицу данных, а затем SqlBulkCopy эту таблицу до промежуточной таблицы.
промежуточный стол выглядит так:
UserID, GroupID, FirstName, LastName, EmailAddress
У меня есть три другие соответствующие таблицы в базе данных. Таблица контактов, таблица групп и таблица сопоставления контактов с группами.
Contacts:
ID, UserID, FirstName, LastName, EmailAddress
Groups
ID, UserID, Name, Description
ContactGroupMapping
ID, ContactID, GroupID
Таблица ContactGroupMapping просто отображает контакты в группы. Надеемся, что промежуточная таблица теперь имеет смысл, она содержит детали каждого импортированного контакта плюс группу, в которую они также должны быть сопоставлены.
Я планировал выполнить запрос к базе данных после SqlBulkCopy, чтобы переместить данные из промежуточной таблицы в таблицы Contacts и ContactGroupMapping. В настоящее время у меня есть запрос, который выглядит примерно так:
INSERT INTO Contacts (UserID, FirstName, LastName, EmailAddress)
SELECT DISTINCT [t1].UserID, [t1].EmailAddress, [t1].FirstName, [t1].LastName FROM ContactImportStaging as [t1]
WHERE NOT EXISTS
(
SELECT UserID, EmailAddress, FirstName, LastName FROM Contacts
WHERE UserID = [t1].UserID AND EmailAddress = [t1].EmailAddress AND FirstName = [t1].FirstName AND LastName = [t1].LastName
)
Итак, моя проблема в том, что, хотя при этом все отдельные контакты вставляются в мою таблицу контактов, у меня нет возможности добавить соответствующую строку в таблицу сопоставления для каждого вновь вставленного контакта.
Единственное решение (возможно, потому что я сосу на SQL), которое я могу придумать, состоит в том, чтобы иметь дополнительное пустое поле в таблице контактов, идентифицирующее группу, с которой должен быть связан контакт, и вставлять это тоже. Затем я мог бы выполнить второй запрос, чтобы выбрать все контакты со значением в этом столбце и вставить в таблицу сопоставлений.
Есть мысли о том, как такого рода вещи должны быть достигнуты наиболее эффективно?
Спасибо.
Редактировать: Для уточнения модели объекта: Есть любое количество контактов и любое количество групп. Контакт может быть в группе посредством записи в таблице ContactGroupMapping. Один контакт может быть в любом количестве групп. На уровне базы данных эта модель относится к трем таблицам Contacts , Groups и ContactGroupMapping . Мне нужно переместить одну строку из промежуточной таблицы и создать две строки; один в таблице контактов и один в таблице ContactGroupMapping.