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

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

源数据(文本文件)

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

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

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

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

数据表

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

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

编写格式化文件

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

  1. < span>xmlversionxmlversion="1.0"?<
  2. < span>BCPFORMAT
  3. xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<
  5. < span>RECORD<
  6. < span>FIELDIDFIELDID="1"xsi:type="CharTerm"TERMINATOR=","/<
  7. < span>FIELDIDFIELDID="2"xsi:type="CharTerm"TERMINATOR=","/<
  8. < span>FIELDIDFIELDID="3"xsi:type="CharTerm"TERMINATOR=","/<
  9. < span>FIELDIDFIELDID="4"xsi:type="CharTerm"TERMINATOR=","/<
  10. < span>FIELDIDFIELDID="5"xsi:type="CharTerm"TERMINATOR=","/<
  11. < span>FIELDIDFIELDID="6"xsi:type="CharTerm"TERMINATOR=","/<
  12. < span>FIELDIDFIELDID="7"xsi:type="CharTerm"TERMINATOR="\r\n"/<
  13. </>RECORD<
  14. < span>ROW<
  15. < span>COLUMNSOURCECOLUMNSOURCE="1"NAME="Date"xsi:type="SQLDATE"/<
  16. < span>COLUMNSOURCECOLUMNSOURCE="2"NAME="OpenPrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/<
  17. < span>COLUMNSOURCECOLUMNSOURCE="3"NAME="HighPrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/<
  18. < span>COLUMNSOURCECOLUMNSOURCE="4"NAME="LowPrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/<
  19. < span>COLUMNSOURCECOLUMNSOURCE="5"NAME="ClosePrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/<
  20. < span>COLUMNSOURCECOLUMNSOURCE="6"NAME="Volumn"xsi:type="SQLINT"/<
  21. </>ROW<
  22. </>BCPFORMAT<

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

编写BULKINSERT语句:

  1. BULKINSERTTestStock  
  2. FROM'C:\SH600475.txt'  
  3. WITH(  
  4. FORMATFILE='C:\BCPFORMAT.xml',  
  5. FIELDTERMINATOR=',',  
  6. ROWTERMINATOR='\r\n'

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

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

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

关于使用BULK INSERT将大量数据导入SQL Server数据库的知识就介绍到这里了,希望本次的介绍能够对您有所帮助。

posted @ 2014-08-21 16:02  人间合体  阅读(290)  评论(0编辑  收藏  举报