Что самый быстрый путь состоит в том, чтобы получить DataTable в SQL Server?

У меня есть DataTable в памяти, которую я должен вывести прямо в таблицу временного файла SQL Server.

После того, как данные были вставлены, я преобразовываю их немного и затем вставляю подмножество тех записей в постоянную таблицу.

Самая трудоемкая часть этой операции получает данные во временную таблицу.

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

Что самый быстрый путь состоит в том, чтобы сделать объемную вставку от C# DataTable в Таблицу Временного файла SQL?

Я не могу использовать сторонние инструменты для этого, так как я преобразовываю данные в память.

Мой существующий метод состоит в том, чтобы создать параметризованный SqlCommand:

INSERT INTO #table (col1, col2, ... col200) VALUES (@col1, @col2, ... @col200)

и затем для каждой строки, очиститесь и установленный параметры и выполнитесь.

Должен быть более эффективный путь. Я могу считать и записать записи на диске за несколько секунд...

7
задан John Gietzen 11 June 2010 в 15:19
поделиться

2 ответа

Вы должны использовать SqlBulkCopy класс .

9
ответ дан 6 December 2019 в 10:47
поделиться

SqlBulkCopy позволит получить данные очень быстро.

Не так давно я писал в блоге о том, как максимизировать производительность. Там есть статистика и примеры. Я сравнивал 2 метода, 1 с использованием SqlDataAdapter и 1 с использованием SqlBulkCopy - в итоге для массовой вставки 100K записей, подход с использованием адаптера данных занял ~25 секунд по сравнению с ~0.8s для SqlBulkCopy.

9
ответ дан 6 December 2019 в 10:47
поделиться