Если вы используете SQL Server, вы можете воспользоваться функцией Массовая вставка .Это должен быть самый быстрый способ вставить данные из файла в базу данных.Первое, что я хотел бы сделать, это вставить данные из вашего файла в «целевую таблицу» (то есть таблицу, структура которой соответствует структуре вашего файла).Также обратите внимание: .NET 2.0 представил SqlBulkCopy , который был бы аналогичным образом полезен, если у вас уже есть данные в памяти или вы читаете их с помощью какого-либо типа DataReader.
Как только содержимое вашего файлавставлены в вашу целевую таблицу, затем вы можете выполнить серию SQL-операторов, чтобы объединить вашу целевую таблицу с вашими целевыми таблицами.Ниже приведен пример реализации этих операторов SQL (Отказ от ответственности: я не проверял их на правильность):
DELETE FROM MyTable
WHERE EXISTS (
SELECT 1
FROM LandingTable
WHERE
LandingTable.RecordType = 'D'
AND LandingTable.KeyField1 = MyTable.KeyField1
AND LandingTable.KeyField2 = MyTable.KeyField2
UPDATE MyTable SET
MyTable.Field1 = LandingTable.Field1,
MyTable.Field2 = LandingTable.Field2,
-- ...
FROM MyTable
INNER JOIN LandingTable ON
LandingTable.KeyField1 = MyTable.KeyField1
AND LandingTable.KeyField2 = MyTable.KeyField2
where
LandingTable.RecordType = 'U'
INSERT INTO MyTable (
Field1,
Field2,
-- ...
)
SELECT
LandingTable.Field1,
LandingTable.Field2,
-- ...
FROM LandingTable
WHERE
LandingTable.RecordType = 'I'
-- Consider how to handle "Insert" records where there is already a record in MyTable with the same key
-- Possible solution below: treat as an "Update"
UPDATE MyTable SET
MyTable.Field1 = LandingTable.Field1,
MyTable.Field2 = LandingTable.Field2,
-- ...
FROM MyTable
INNER JOIN LandingTable ON
LandingTable.KeyField1 = MyTable.KeyField1
AND LandingTable.KeyField2 = MyTable.KeyField2
where
LandingTable.RecordType = 'I'
-- Now only insert records from LandingTable where there is no corresponding record in MyTable with the same key (determined with a left outer join)
INSERT INTO MyTable (
Field1,
Field2,
-- ...
)
SELECT
LandingTable.Field1,
LandingTable.Field2,
-- ...
FROM LandingTable
LEFT OUTER JOIN MyTable ON
MyTable.KeyField1 = LandingTable.KeyField1
AND MyTable.KeyField2 = LandingTable.KeyField2
WHERE
LandingTable.RecordType = 'I'
and MyTable.KeyField1 is null
Ссылки, которые я нашел после выполнения быстрого поиска: