设为首页 收藏本站
查看: 1096|回复: 0

[经验分享] 使用BULK INSERT高效导入大量数据到SQL Server数据库

[复制链接]

尚未签到

发表于 2015-6-30 11:35:56 | 显示全部楼层 |阅读模式
源数据 (文本文件)
  下载了大量的股票历史数据, 都是文本格式的:
DSC0000.png

  每个文件第一行包含股票代码, 股票名称, 数据类型. 第二行是数据列的名称:
DSC0001.png


数据表
  在数据库中新建了一个数据表TestStock, 并设置以下字段, 但没有关于"成交额"的字段, 因为以后的计算不会用到这个数据. 另外这里关于价格的字段没有使用money数据类型, decimal足矣.
DSC0002.png


编写格式化文件
  编写格式化文件请参考:

  1. XML 格式化文件的架构语法
  2. XML 格式化文件示例

  当前数据的格式化文件为:






















  暂且先保存在C盘目录下吧, 文件名叫BCPFORMAT.xml.

编写BULK INSERT语句
  关于BULK INSERT的语法请参考这篇文档, 这里用到的参数主要为FORMATFILE, FIELDTERMINATOR和ROWTERMINATOR.

  BULK INSERT TestStock
  FROM 'C:\SH600475.txt'
  WITH (
  FORMATFILE = 'C:\BCPFORMAT.xml',
  FIELDTERMINATOR = ',',
  ROWTERMINATOR = '\r\n' )

  本来也应该用到 FIRSTROW 这个属性的, 因为我想跳过文本的前两行, 毕竟第三行开始才是真正的数据. 但我遇到了和这个帖子一样的问题, 就是设置 FIRSTROW 为3的时候, 实际上却从文本第5行的数据开始录入, 当我设置 FIRSTROW 为1(本想这次应该是从第文本3行开始录入吧), 结果报错, 说一行数据格式有问题 DSC0003.png , 后来我处理了一下数据: 在BULK INSERT语句执行前, 先删除文本的前两行, 并且在BULK INSERT语句中不指定 FIRSTROW 属性, 希望有人能告诉我这边最好应该怎么做...

执行
  BULK INSERT的速度很快, 我这个例子几乎就不花时间, 而且达到了我想要的效果:
DSC0004.png

  同样的效果, 如果从文本中读一行记录, 执行一次 INSERT INTO 语句的话, 需要10秒左右, 由此可见 BULK INSERT的高效.

参考
  1. http://msdn.microsoft.com/zh-cn/library/ms188365.aspx
  2. http://msdn.microsoft.com/zh-cn/library/ms189327.aspx
  3. http://msdn.microsoft.com/zh-cn/library/ms191234.aspx
  4. http://stackoverflow.com/questions/1029384/sql-bulk-insert-with-firstrow-parameter-skips-the-following-line
  本文链接: http://www.iyunv.com/technology/archive/2011/08/10/2133734.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81894-1-1.html 上篇帖子: sql server 2008降级到sql server 2005\2000 下篇帖子: SQL Server 的存储过程[转]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表