zoukankan      html  css  js  c++  java
  • 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="
    "/>
      </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='
    ') 

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


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

  • 相关阅读:
    PHP中的trait
    Laravel中的队列
    微信小程序开发常见问题
    python学习day1
    javaScript实现栈的创建,添加元素,检查栈是否为空,删除元素,查看栈顶元素,清空栈元素,toString方法,通过栈实现多种进制转换
    join&concat&splice&slice&indexOf&lastindexOf&charCodeAt&fromCharCode
    使用函数自动创建表格
    两种方式实现随机颜色
    多选全选框使用addEvenListener实现
    使用setInterval来控制正方形的移动的频率(每隔1秒),鼠标点击停止移动,当再次点击恢复移动
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234210.html
Copyright © 2011-2022 走看看