BULK INSERT如何将大量数据高效地导入SQL Server
2016-12-29 00:00
609 查看
在实际的工作需要中,我们有时候需将大量的数据导入到数据库中。这时候我们不得不考虑的就是效率问题。本文我们就介绍了一种将大量数据高效地导入SQL Server数据库的方法,该方法是使用BULK INSERT来实现的,接下来就让我们来一起了解一下这部分内容。
源数据(文本文件)
下载了大量的股票历史数据,都是文本格式的:
![](https://static.oschina.net/uploads/img/201612/29153707_0zDT.jpg)
每个文件第一行包含股票代码,股票名称,数据类型.第二行是数据列的名称:
![](https://static.oschina.net/uploads/img/201612/29153707_K0ve.jpg)
数据表
在数据库中新建了一个数据表TestStock,并设置以下字段,但没有关于"成交额"的字段,因为以后的计算不会用到这个数据。另外这里关于价格的字段没有使用money数据类型,decimal足矣。
![](https://static.oschina.net/uploads/img/201612/29153707_kgfe.jpg)
编写格式化文件
当前数据的格式化文件为:
暂且先保存在C盘目录下吧,文件名叫BCPFORMAT.xml
编写BULKINSERT语句:
执行BULKINSERT的速度很快,结果如下:
![](https://static.oschina.net/uploads/img/201612/29153707_yI94.jpg)
同样的效果,如果从文本中读一行记录,执行一次INSERTINTO语句的话,需要10秒左右,由此可见BULKINSERT的高效。
源数据(文本文件)
下载了大量的股票历史数据,都是文本格式的:
![](https://static.oschina.net/uploads/img/201612/29153707_0zDT.jpg)
每个文件第一行包含股票代码,股票名称,数据类型.第二行是数据列的名称:
![](https://static.oschina.net/uploads/img/201612/29153707_K0ve.jpg)
数据表
在数据库中新建了一个数据表TestStock,并设置以下字段,但没有关于"成交额"的字段,因为以后的计算不会用到这个数据。另外这里关于价格的字段没有使用money数据类型,decimal足矣。
![](https://static.oschina.net/uploads/img/201612/29153707_kgfe.jpg)
编写格式化文件
当前数据的格式化文件为:
<?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的速度很快,结果如下:
![](https://static.oschina.net/uploads/img/201612/29153707_yI94.jpg)
同样的效果,如果从文本中读一行记录,执行一次INSERTINTO语句的话,需要10秒左右,由此可见BULKINSERT的高效。
相关文章推荐
- BULK INSERT如何将大量数据高效地导入SQL Server
- BULK INSERT如何将大量数据高效地导入SQL Server
- BULK INSERT如何将大量数据高效地导入SQL Server
- 使用BULK INSERT高效导入大量数据到SQL Server数据库
- BULK INSERT如何将大量数据高效地导入SQL Server(转)
- 使用 BULK INSERT 或 OPENROWSET(BULK...) 导入批量数据 (SQL Server)
- BULK INSERT, 实战手记:让百万级数据瞬间导入SQL Server
- Bulk insert如何导入部分字段的数据
- SQL Server使用Bulk Insert把一个文本导入到数据库
- C#如何快速高效地导出10万以上的大量数据
- 如何将数据从 Excel 导入到 SQL Server
- 转:C#如何快速高效地导出10万以上的大量数据?
- 如何将mdf和ldf格式的数据导入到sql server里
- SQL Server中采用BULK INSERT实现大数据量文本文件批量导入
- 数据库中的数据导入导出汇总一(bulk insert命令,bcp命令)
- 使用 BULK INSERT 或 OPENROWSET(BULK...) 导入大容量数据
- SQL Server里面如何导出包含(insert into)数据的SQL脚本
- 如何把dat数据文件导入到sql server的表中?
- SQL Server中采用BULK INSERT实现大数据量文本文件批量导入
- C#如何快速高效地导出10万以上的大量数据?