BULK INSERT如何将大量数据高效地导入SQL Server

在实际的工作需要中,我们有时候需将大量的数据导入到数据库中。这时候我们不得不考虑的就是效率问题。本文我们就介绍了一种将大量数据高效地导入SQL Server数据库的方法,该方法是使用BULK INSERT来实现的,接下来就让我们来一起了解一下这部分内容。

 

源数据(文本文件)

下载了大量的股票历史数据,都是文本格式的:

 

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

 

数据表

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

 

编写格式化文件

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

<?xml version="1.0"?>
<BCPFORMAT  xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <RECORD>
    <FIELDID FIELDID="1" xsi:type="CharTerm" TERMINATOR=","/>
    <FIELDID FIELDID="2" xsi:type="CharTerm" TERMINATOR=","/>
    <FIELDID FIELDID="3" xsi:type="CharTerm" TERMINATOR=","/>
    <FIELDID FIELDID="4" xsi:type="CharTerm" TERMINATOR=","/>
    <FIELDID FIELDID="5" xsi:type="CharTerm" TERMINATOR=","/>
    <FIELDID FIELDID="6" xsi:type="CharTerm" TERMINATOR=","/>
    <FIELDI DFIELDID="7" xsi:type="CharTerm" TERMINATOR="\r\n"/>
  </RECORD>
  <ROW>
    <COLUMNSOURCE COLUMNSOURCE="1"  NAME="Date" xsi:type="SQLDATE"/>
    <COLUMNSOURCE COLUMNSOURCE="2"  NAME="OpenPrice" xsi:type="SQLDECIMAL" PRECISION="6" SCALE="2"/>
    <COLUMNSOURCE COLUMNSOURCE="3"  NAME="HighPrice" xsi:type="SQLDECIMAL" PRECISION="6" SCALE="2"/>
    <COLUMNSOURCE COLUMNSOURCE="4"  NAME="LowPrice" xsi:type="SQLDECIMAL" PRECISION="6" SCALE="2"/>
    <COLUMNSOURCE COLUMNSOURCE="5"  NAME="ClosePrice" xsi:type="SQLDECIMAL" PRECISION="6" SCALE="2"/>
    <COLUMNSOURCE COLUMNSOURCE="6"  NAME="Volumn" xsi:type="SQLINT"/>
  </ROW>
</BCPFORMAT>

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

编写BULKINSERT语句:

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

执行BULKINSERT的速度很快,结果如下:


 

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

转载于:https://www.cnblogs.com/smartsmile/p/6234210.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值