SQL CLR SqlBulkCopy из DataTable - PullRequest
       11

SQL CLR SqlBulkCopy из DataTable

1 голос
/ 23 апреля 2009

У нас есть DataTable в памяти в процедуре CLR. После значительной обработки DataTable содержит много данных, которые нам нужно загрузить в таблицу в базе данных. К сожалению, поскольку мы используем контекстное соединение SqlBulkCopy не будет работать (выдает ошибку: Запрошенная операция недоступна для контекстного соединения описание ограничений контекста ) .

Мы думаем о создании дополнительного регулярного соединения и использовании его для выполнения SQLBulkCopy. Это выглядит довольно глупо, учитывая издержки использования обычного соединения через контекстное соединение . Мы подумали об итерации по строкам в DataTable и вставке записи для каждой, но она огромного размера, и SQLBulkCopy кажется более подходящим.

Мы не женаты на DataTable и просто ищем лучший способ вставки огромного количества данных в базу данных из процедуры CLR. Последнее примечание к DataTable, которое представляет базовую таблицу базы данных, но не привязано к таблице через DataSet или TableAdapter. Способ сделать это в процедуре CLR не сразу был очевиден. В таком случае приемлемым решением будет использование метода AcceptChanges или Update.

1 Ответ

2 голосов
/ 23 апреля 2009

Я бы оценил SQLBulkCopy в 10-100 раз быстрее, чем вставки, в зависимости от размера таблицы, поэтому компромисс стоит того.

Поскольку вы выполняете «значительную обработку» в своей DataTable, которая, без сомнения, требует времени и ресурсов, крошечные дополнительные издержки, связанные либо с использованием полного соединения вместо контекстного, либо с открытием совершенно нового соединения, являются небольшим цена, чтобы заплатить.

...