Самый быстрый способ получить данные из массива в базу данных SQLServer? - PullRequest
3 голосов
/ 13 января 2009

Проблема: как наиболее эффективно переместить данные из массива в таблицу SQL Server.

Подробности: я создал массив с множеством строк (обычно около 100 000) и множеством столбцов (около 40) в памяти в приложении WinForms. Мне нужно получить этот массив в соответствующую таблицу SQL Server как можно быстрее. Сейчас я создаю объект SqlCommand, перебирая 100 000 строк в моем массиве, и для каждой строки назначая 40 параметров объекта команды, затем вызывая ExecuteCommand. Это работает, но медленно, и, конечно, не должно быть самым эффективным способом сделать это. Должен ли я поместить все данные из массива в DataTable, а затем каким-то образом отправить таблицу данных сразу (я не знаю, как это сделать)? Или какая-то другая техника? Запишите в файл и используйте bcp (кажется, что это не будет быстрее, я не пробовал). Любые предложения приветствуются!

Ответы [ 4 ]

5 голосов
/ 13 января 2009

SqlBulkCopy . Было бы даже лучше, если бы вы могли хранить содержимое в памяти как DataTable, потому что одна из перегрузок метода WriteToServer() принимает одно.

РЕДАКТИРОВАТЬ: Вот пример о том, как использовать API.

1 голос
/ 13 января 2009

У Пинала Дейва был странный метод выполнения массовой вставки , о котором я читал на днях:

INSERT INTO MyTable  (FirstCol, SecondCol)
    SELECT  'First' ,1
    UNION ALL
SELECT  'Second' ,2
    UNION ALL
SELECT  'Third' ,3
...

Учитывая ваш большой набор данных, попробуйте просто посмотреть, что происходит.

1 голос
/ 13 января 2009

Мы используем XML для больших пакетов данных. Передайте строку xml в хранимую процедуру, и пусть sp разбивает xml на таблицу. Затем выберите в вашей базе данных из временной таблицы. Кажется, у нас это хорошо работает.

Редактировать: Как отмечено в комментариях ниже, процедура, которая преобразует XML в таблицу: sp_xml_preparedocument.

declare @idoc int
exec sp_xml_preparedocument @idoc output, @input_xml
-- select into a tmp table from openxml(@idoc, 'xpath_to_your_data')
exec sp_xml_removedocument @idoc
0 голосов
/ 16 января 2009
  • Отображение данных в виде данных в приложении winforms.
  • Копирование данных в Excel (или OpenOffice Calc).
  • Сохранить файл.
  • Используйте инструмент импорта данных для извлечения данных и отображения полей.

Вы бы сделали за 15 минут.

Редактировать: тьфу, это может не сработать для 100k строк. Но это быстро, легко и стоит попробовать, прежде чем перейти к чему-то более сложному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...