Как работает SqlBulkCopy

.net sqlbulkcopy sql-server

Вопрос

Я знаком с классом C # SqlBulkCopy, где вы можете вызвать метод WriteToServer, проходящий через DataTable.

Мой вопрос в том, что основной механизм на сервере SQL используется для массового вставки этих данных?

Причина, по которой я спрашиваю, заключается в том, что для массовой вставки, указанной в файле справки Bulk Insert MSDN T-SQL, требуется импортировать файл данных. Создает ли файл SqlBulkCopy файл данных?

Я хотел бы понять этот материал, чтобы выяснить, могу ли я использовать функции объемной вставки в SQL.

Если я напишу инструкцию SQL, которая подготавливает все строки для вставки в определенную таблицу (тысячи строк), могу ли я вставить их в таблицу назначения? Что-то вроде этого, как я это делаю сейчас,

INSERT INTO sync_filters (table_name, device_id, road_id, contract_id)
    SELECT * FROM dbo.sync_contract_filters (@device_id)

И dbo.sync_contract_filters - это функция для создания всех строк для вставки. Может ли это быть навалом?

Принятый ответ

SqlBulkCopy не создает файл данных. Он передает таблицу данных непосредственно из объекта .Net DataTable на сервер с использованием доступного протокола связи (Именованные каналы, TCP / IP и т. Д.) И вставляет данные в таблицу назначения массово, используя тот же метод, который используется BCP ,


Популярные ответы

SqlBulkCopy может использовать datatable, IDataReader или DataRow [] в качестве источника данных. Взгляните на методы WriteToServer этого класса. Я нашел, что это довольно полезный механизм получения данных в SQL Server. Я использовал это совместно с CSVReader ранее. Предыдущая ссылка дает вам представление о том, как она работает с классом, который реализует IDataReader.

Возможно, вам придется поиграть с размерами партии, чтобы убедиться, что вы получите ожидаемую производительность.

Руководство по эффективности загрузки данных в MSDN - довольно полезный ресурс, если вы хотите быстро получить максимальную производительность за счет записи больших объемов данных. Он больше фокусируется на таких вещах, как BCP и BULK INSERT, но затрагивает SQLBulkCopy, а также дает довольно много пищи для размышлений (может быть, немного слишком много, но, по крайней мере, это полезная ссылка).



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow