Я согласен с Джоном в том, что SqlBulkCopy
или sqlxml - лучшие варианты в SQL Server 2005; обратите внимание, что в SQL Server 2008 у вас также есть табличные параметры , которые стоит рассмотреть; особенно при смешивании с новым объединением объединения .
Обратите внимание, что если вы используете SqlBulkCopy
, я настоятельно рекомендую массовую вставку только в промежуточную таблицу, т. Е. В отдельную таблицу только для импорта; затем запустите хранимую процедуру, чтобы переместить данные в оперативную таблицу. Таким образом, вы получаете правильное ведение журнала и можете выполнять транзакции с узкой областью действия только в базе данных, пока вы запускаете SP (то есть вам не нужна транзакция, охватывающая весь этот сетевой IO).
Еще одна точка; если вы имеете дело с большими объемами данных, вам может не потребоваться загружать DataTable
(так как это заставляет вас сначала буферизовать все данные в памяти); в качестве альтернативы можно также написать свой собственный IDataReader
, который извлекает данные из потока (например, из файла и т. д.); см SimpleDataReader
здесь . SqlBulkCopy
с радостью примет данные от IDataReader
.