在 SQL Server 2008 中使用 .Net 大容量复制或表值参数进行批量插入的性能比较
我正在 VB.Net (4.0) 中开发桌面应用程序 会有很多SQL脚本,其中包含很多插入查询。 目前我们正在使用 SMO (http://msdn.microsoft.com/en-us/library/ms162557.aspx) 运行脚本
一种方法
为了提高性能,我们计划将 sql 脚本更改为 xml 文件(而不是插入查询) ,它将有 定义了适当的 xsd 的 xml 数据)。 将 xml 加载到数据集并使用 SQL 大容量复制我们尝试插入到 SQL Server。
第二种方式
将 xml 加载到 dataSet 根据数据集中的数据表(从 xml 文件创建)创建用户定义的表类型,并创建一个具有参数作为该表类型的存储过程。在该 sp 中,它将包含 插入表名 从表值参数中选择 *。
所以请建议我最好和最合适的方式。提前致谢。
I am working on a desktop application in VB.Net (4.0)
There will a lot of SQL scripts which contains a lot of insert queries .
Currenlty we are running the scripts using SMO (http://msdn.microsoft.com/en-us/library/ms162557.aspx)
One way
For performance, we have planned to change the sql scripts to xml file ( instead of insert queries, it will have
xml data with a proper xsd defined ).
Loads xml to dataSet and Using SQL Bulk Copy we are trying to insert to SQL Server.
Second way
Loads xml to dataSet
Creates user defined table type based on the datatable in dataset (creted from xml file) and create a stored procedure which has parameter as this table type . In that sp, it will contains
insert into tablename
select * from tablevalueparameter.
So please suggest me to best and suitable way. Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不科学的答案...
TVP 方法的性能与运行单个 INSERT 语句相同数量级,我预计这比 SQLBulkCopy 慢。
但是,我希望每种技术取决于您拥有的行数:对于每批 1000 或 10k+ 行,我会不假思索地使用 SQLBulkCopy,因为我不需要存储过程。
Unscientific answer...
The TVP approach would the same order of magnitude performance as running individual INSERT statements, which I'd expect slower than SQLBulkCopy.
However, I'd expect each technique depends on how many rows you have: for 1000s or 10k+ per batch I'd use SQLBulkCopy without thinking because I don't need a stored procedure.