2012-01-26 3 views

ответ

5

Лучшим способом является использование bcp utility или SSIS workflow. Эти инструменты имеют такие усовершенствования, как кеширование и пакетная обработка, которые вы пропустите в наивной реализации. Следующим лучшим вариантом является оператор BULK INSERT, если сам движок SQL Server может достигнуть файла. Последним вариантом будет класс SqlBulkCopy, который позволяет вашему приложению читать файл, может быть, обработать его и преобразовать, а затем передать данные в качестве перечислителя в SqlBulkCopy.

+0

Спасибо .. Я проверю –

+0

я использовал SqlBulkCopy, но вопрос в том, как я могу знать, что общее число строк, вставленного с помощью SqlBulkCopy .WriteToServer()? –

+1

Просто из любопытства, почему вы бы поставили 'SqlBulkCopy' за другими вариантами? – jadarnel27

0

Используется C# требование? Самый быстрый способ - использовать инструмент командной строки bcp: http://msdn.microsoft.com/en-us/library/ms162802.aspx

+0

Спасибо Крис Шайн, я хочу использовать C#, потому что это будет частью приложения, написанного с C# –

1

Недавно я работал над такой же проблемой, я понял, что для нее есть несколько решений.

Я написал BatchProgram (для дизайна пакетной программы читать это - http://msdn.microsoft.com/en-us/magazine/cc164014.aspx)

Вы можете использовать SQL Server Utilities либо Bcp.exe или osql.exe или рамочное .net прилагается класс SqlBulkCopy.

Я закончил с использованием BCP (я получил файл CSV и используется файл форматирования и загрузки данных) и OSQL (я использовал OSQL где я должен поставить файл на хранимого прок)

я также пошел в класс .NET Process и использовал outputdatarecieved событие для регистрации всего вывода BCP.exe в консоль (прочесть это -), это сработало довольно хорошо.

Я также пытался использовать класс SQLBulkCopy, но может быть медленным, если вы сначала загружаете данные в datatable (http://msdn.microsoft.com/en-us/library/ex21zs8x.aspx), если вы используете IDataReader (http://msdn.microsoft.com/en-us/library/434atets.aspx), это может быть быстро.

Поскольку у меня было миллионы строк, я попытался использовать CSVReader (http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader), который довольно быстр. Но по линии было слишком много проблем при преобразовании данных, и у меня не было много гибкости на стороне SQL-сервера.

В итоге я использовал BCP и OSQL.

Смежные вопросы