2010-06-25 141 views

回答

1

根据INSERT,SqlBulkCopy是将数据批量加载到SQL Server的最快方法。我已经在博客上介绍了如何使用它/演示了性能here - 与使用SqlDataAdapter通过SqlDataAdapter.Update和SqlDataAdapter.InsertCommand一起发送批量插入的另一种方法相比。

在UPDATE方面,一种技术是使用SqlBulkCopy将数据批量加载到数据库中的“临时”临时表中。然后,从该临时表中运行基础表的更新。或者,您可以使用SqlDataAdapter.Update方法与SqlDataAdapter.UpdateCommand一起使用。对于原始吞吐量,SqlBulkCopy(仅限INSERT)是理想的方式。但是,为了处理特定记录的错误,SqlDataAdapter方法很好,因为您可以告诉它在发生故障时继续向数据库发送行(例如,如果您在特定记录上遇到约束错误,则可以选择ContinueUpdateOnError ,然后在最后确定那些没有错误。

+0

嗨,先生,非常感谢你,是ms sql 2008能够接受强类型对象列表的参数,例如List 。因为我认为2k8能够传递参数类型的数据表。 – user335160 2010-06-25 09:18:16

+0

@crisgomez - SQL Server 2k8确实支持表值参数 - 所以你可以通过在一张数据表中,我也做过博客技术(将其与CSV和XML方法进行比较):http://www.adathedev.co.uk/2010/02/sql-server-2008-table-valued-parameters.html 与SqlBulkCopy等相比,我没有知道什么性能是真正的大容量数据 - 将是基准的东西,它可能会打tempdb更多 – AdaTheDev 2010-06-25 09:46:54

+0

那么强类型列表的对象,例如列表,将MS SQL 2K8能够传递? – user335160 2010-06-25 09:52:09

0

取决于您的数据访问层的外观。如果您正在使用企业库,那么我会说this。如果你使用LINQ to sql,则this

+0

怎么样的LINQ to SQL? – user335160 2010-06-25 08:43:26

+0

我已经更新了我的答案。 – IsmailS 2010-06-25 08:51:42

+0

这只是一个批量更新和删除。 – user335160 2010-06-25 09:55:43