2010-06-25 4 views

ответ

1

С точки зрения топок, SqlBulkCopy это самый быстрый способ массовых данных загрузить в SQL Server. Я уже писал о том, как использовать его/продемонстрировали эффективность here - по сравнению с другим подходом, используя SqlDataAdapter отправить пакетные вставки через SqlDataAdapter.Update в сочетании с SqlDataAdapter.InsertCommand.

С точки зрения уточнений, один метод заключается в объеме загрузки данных в «временной» промежуточной таблицы в базе данных с использованием SqlBulkCopy. А затем запустите обновление в своей базовой таблице из этой промежуточной таблицы. В качестве альтернативы вы можете использовать подход SqlDataAdapter.Update в сочетании с SqlDataAdapter.UpdateCommand

Для сырой пропускной способности SqlBulkCopy (только для INSERT) является идеальным способом. Тем не менее, для обработки ошибок с конкретными записями подход SqlDataAdapter хорош, потому что вы можете сказать ему продолжить отправку строк в БД в случае неудачи (например, скажем, что вы получаете ошибку ограничения на конкретную запись, вы можете выбрать ContinueUpdateOnError , а затем в конце определить те, которые сделали ошибку.

+0

Привет сэр, спасибо, это MS SQL 2008 способен принимать параметр сильно типизированных список объектов, например List .Becuase Я думаю, что 2k8 способен проходить тип параметра DataTable – user335160

+0

@crisgomez -. 2k8 SQL Server не поддерживает таблицы значение параметров - так что вы можете передать в таблице данных. Я также писал об этом метод (сравнивая его с CSV и XML подходов): http://www.adathedev.co.uk/2010/02/sql-server-2008-table-valued-parameters.html По сравнению с SqlBulkCopy и т.д., я не знать, что такое производительность для реальных объемных данных - было бы что-то для сравнения, он мог бы поразить tempdb больше – AdaTheDev

+0

, а что касается строго типизированного списка объектов, например List , может ли ms sql 2k8 передать это? – user335160

0

Зависит от того, как уровень доступа к данным выглядит. Если вы используете корпоративную библиотеку, я бы сказал, this. И если вы используете linq для sql, то this.

+0

, что о LINQ к SQL? – user335160

+0

Я обновил свой ответ. – IsmailS

+0

это было только пакетного обновления и удаления. – user335160

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