У меня есть DataTable в памяти, которую я должен вывести прямо в таблицу временного файла SQL Server.
После того, как данные были вставлены, я преобразовываю их немного и затем вставляю подмножество тех записей в постоянную таблицу.
Самая трудоемкая часть этой операции получает данные во временную таблицу.
Теперь, я должен использовать временные таблицы, потому что больше чем одна копия этого приложения работает сразу, и мне нужен слой изоляции, пока фактической вставки в постоянную таблицу не происходит.
Что самый быстрый путь состоит в том, чтобы сделать объемную вставку от C# DataTable в Таблицу Временного файла SQL?
Я не могу использовать сторонние инструменты для этого, так как я преобразовываю данные в память.
Мой существующий метод состоит в том, чтобы создать параметризованный SqlCommand:
INSERT INTO #table (col1, col2, ... col200) VALUES (@col1, @col2, ... @col200)
и затем для каждой строки, очиститесь и установленный параметры и выполнитесь.
Должен быть более эффективный путь. Я могу считать и записать записи на диске за несколько секунд...
SqlBulkCopy позволит получить данные очень быстро.
Не так давно я писал в блоге о том, как максимизировать производительность. Там есть статистика и примеры. Я сравнивал 2 метода, 1 с использованием SqlDataAdapter и 1 с использованием SqlBulkCopy - в итоге для массовой вставки 100K записей, подход с использованием адаптера данных занял ~25 секунд по сравнению с ~0.8s для SqlBulkCopy.