文档章节

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

深圳大道
 深圳大道
发布于 2016/12/29 15:25
字数 491
阅读 5
收藏 0

在实际的工作需要中,我们有时候需将大量的数据导入到数据库中。这时候我们不得不考虑的就是效率问题。本文我们就介绍了一种将大量数据高效地导入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的高效。





本文转载自:http://blog.csdn.net/smartsmile2012/article/details/22298979

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
转载 Bulk Insert命令详细

BULK INSERT以用户指定的格式复制一个数据文件至数据库表或视图中。 语法: BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' } WITH ( [ BATCHSIZE [ = bat......

sincoder
2012/12/12
0
2
PostgreSQL 与 MSSQL(SQL Server) 之间 数据相互迁移、导入、导出测试

标签 PostgreSQL , ms sql , SQL Server 背景 测试表结构 从 PostgreSQL 导入 MSSQL MS SQL bcp与BULK INSERT都不支持stdin,所以我这里使用落地到文件的方法,从PostgreSQL导入MS SQL。 1、...

德哥
04/14
0
0
SQL Server · 特性介绍 · 聚集列存储索引

摘要 微软在SQL Server 2012引入了列存储技术,使得OLAP和Data warehouse场景性能提升10X,并且数据压缩能力超过传统表7X。这项技术包含三个方面的创新:列存储索引、Batch Mode Processing...

阿里云RDS-数据库内核组
2017/02/09
0
0
从TXT文本文档向Sql Server中批量导入数据

下面我们通过以下的简单的SQL语句即可实现数据的批量导入,代码如下: Bulk insert id From 'G:文档test.txt' With ( fieldterminator=',', rowterminator='n') 注意:1) bulk insert 为Sql......

二月绀香
04/25
0
0
用代码从文件中导入数据到SQL Server

引言 导入数据到SQL Server 是常见的需求,特别是定期导入这种需求。 对于定期导入主要有以下几种方式可选择: Bulk Insert Bcp Utility OpenRowSet 写程序导入(使用poi, npoi, ExcelDataR...

傍晚雨
2018/07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

威胁快报|新兴挖矿团伙借助shodan作恶,非web应用安全再鸣警钟

近日,阿里云安全发现了一个使用未授权访问漏洞部署恶意Docker镜像进行挖矿的僵尸网络团伙。我们给这一团伙取名为Xulu,因为该团伙使用这个字符串作为挖矿时的用户名。 Xulu并不是第一个攻击...

阿里云官方博客
28分钟前
3
0
MD5 加密需要注意编码格式!!!

相信做过MD5加密的童鞋都遇到过字符编码的坑,一般加密出来的结果和其他人不一样都是字符编码不一致导致的,比如类文件的字符编码、浏览器的字符编码等和对方不一致,所以就需要转码统一字符...

jason_kiss
30分钟前
2
0
python中字符串的操作

https://www.jianshu.com/p/7fc851b6a7ee

writeademo
40分钟前
1
0
如何制定 Java 性能调优标准?

想让你的程序更快更稳,但是系统经常出各种 bug,无从下手?Java 性能调优全攻略来啦! 我有一个朋友,有一次他跟我说,他们公司的系统从来没有经过性能调优,功能测试完成后就上线了,线上也...

Java领航员
40分钟前
2
0
java博客项目

项目地址:https://github.com/otale/tale 项目演示地址:https://tale.biezhi.me/ 项目介绍:Tale使用轻量级mvc框架Blade进行开发,默认主题使用漂亮的pinghsu, 特征 设计简洁,界面美观 ...

编程资源库
41分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部