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

数据库 SQL Server
本文我们详细介绍了BULK INSERT将大量数据高效地导入SQL Server数据库的方法,希望本次的介绍能够对您有所帮助。

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

源数据(文本文件)

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

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

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

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

数据表

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

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

编写格式化文件

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

  1. <?xmlversionxmlversion="1.0"?> 
  2.  
  3. <BCPFORMAT 
  4.  
  5. xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" 
  6.  
  7. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
  8.  
  9. <RECORD> 
  10.  
  11. <FIELDIDFIELDID="1"xsi:type="CharTerm"TERMINATOR=","/> 
  12.  
  13. <FIELDIDFIELDID="2"xsi:type="CharTerm"TERMINATOR=","/> 
  14.  
  15. <FIELDIDFIELDID="3"xsi:type="CharTerm"TERMINATOR=","/> 
  16.  
  17. <FIELDIDFIELDID="4"xsi:type="CharTerm"TERMINATOR=","/> 
  18.  
  19. <FIELDIDFIELDID="5"xsi:type="CharTerm"TERMINATOR=","/> 
  20.  
  21. <FIELDIDFIELDID="6"xsi:type="CharTerm"TERMINATOR=","/> 
  22.  
  23. <FIELDIDFIELDID="7"xsi:type="CharTerm"TERMINATOR="\r\n"/> 
  24.  
  25. </RECORD> 
  26.  
  27. <ROW> 
  28.  
  29. <COLUMNSOURCECOLUMNSOURCE="1"NAME="Date"xsi:type="SQLDATE"/> 
  30.  
  31. <COLUMNSOURCECOLUMNSOURCE="2"NAME="OpenPrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/> 
  32.  
  33. <COLUMNSOURCECOLUMNSOURCE="3"NAME="HighPrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/> 
  34.  
  35. <COLUMNSOURCECOLUMNSOURCE="4"NAME="LowPrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/> 
  36.  
  37. <COLUMNSOURCECOLUMNSOURCE="5"NAME="ClosePrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/> 
  38.  
  39. <COLUMNSOURCECOLUMNSOURCE="6"NAME="Volumn"xsi:type="SQLINT"/> 
  40.  
  41. </ROW> 
  42.  
  43. </BCPFORMAT> 

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

编写BULKINSERT语句:

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

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

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

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

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

【编辑推荐】

  1. SQL Server 2005数据库nolock使用详解
  2. SQL Server 2005无法连接到本地服务器的解决
  3. SQL Server如何查询当前服务器有多少连接请求
  4. SQL Server通过整理索引碎片和重建索引提高速度
  5. SQL Server 2008安装无法通过性能计数器一致性的解决
责任编辑:赵鹏 来源: 博客园
相关推荐

2011-08-01 09:09:07

SQL Server SQL Server 数据库

2017-11-21 08:36:00

MongoDB关系型数据库数据导入

2011-07-08 14:54:38

系统监视器 SQL Server

2018-10-22 14:48:39

KafkaHadoop代码

2011-07-28 18:08:51

SQL Server MySQL

2010-06-24 09:47:47

SQL Server

2011-07-12 13:01:11

ExcelOracleSql Server

2010-04-16 14:26:14

bulk Insert

2011-07-28 15:53:06

SQL Server数合并查询

2018-10-15 13:57:38

Hadoop数据库MySQL

2021-01-28 09:00:00

SQL数据库NoSQL

2019-09-27 12:44:03

数据建模企业数据存储

2011-03-11 13:26:23

SQL Server数导入数据

2021-03-08 07:46:53

Git开源控制系统

2023-12-29 07:04:28

Go项目Docker编写

2023-02-17 12:07:45

ChatGPTPython

2019-10-17 09:45:02

照片SD卡Windows 10

2012-06-14 09:37:45

Google地图

2017-06-28 08:14:57

数据库区块链比特币

2022-05-11 09:51:10

云计算公共云
点赞
收藏

51CTO技术栈公众号