BULK INSERT 实现批量数据导入

原创 2006年06月23日 10:08:00

BULK INSERT 将数据从数据文件加载到表中。此功能类似于 bcp 命令的 in 选项,但是数据文件是由 SQL Server 进程读取的。

BULK INSERT 语句能在用户定义事务中执行。对于一个用 BULK INSERT 语句和 BATCHSIZE 子句将数据加载到使用多个批处理的表或视图中的用户定义事务来说,回滚它将回滚所有发送给 SQL Server 的批处理。

在 SQL Server 2005 中,BULK INSERT 将对从文件中读取的数据执行新的且更严格的数据验证和数据检查,因此,在对无效数据执行验证和检查时,可能导致现有脚本失败。例如,BULK INSERT 现在验证:

  • float 或 real 数据类型的本机表示形式是有效的。

  • Unicode 数据长度的字节数为偶数。

无效数据的形式在 SQL Server 的早期版本中可以大容量导入,但现在可能无法加载。在早期版本中,客户端试图访问无效数据时才会发生错误。在大容量加载之后查询数据时,添加的验证可以最大限度地减少警告。

 

示例:

A. 使用管道从文件导入数据

此示例将订单详细信息从指定的数据文件导入 AdventureWorks.Sales.SalesOrderDetail 表,并使用竖线 (|) 作为字段终止符,使用 |/n 作为行终止符。
BULK INSERT AdventureWorks.Sales.SalesOrderDetail
   FROM 'f:/orders/lineitem.tbl'
   WITH
      (
         FIELDTERMINATOR =' |',
         ROWTERMINATOR =' |/n'
      )
 

B:文本格式文件导入

数据如下:
-------------------------------------------------------------------------------------
000001;深发展;2006-06-12;连续停牌,走势很好,继续持有
000002;万科;2006-06-12;放量下行,关注指标,注意回避
000817;辽河油田;2006-06-12;连续停牌,时间有限,即将退市
000818;锦化氯碱;2006-06-12;盘跌明显,仍有空间,注意回避

 

--
--建表
CREATE TABLE tmp_txt_vendor (
                              a1 varchar (200) NULL,
                             a2 varchar (200)  NULL,
                             a3 varchar (200)  null,
                             a4 varchar (200) null
                         )
DECLARE @srcfile AS VARCHAR(20),
  @fieldTerminator1 AS VARCHAR(10),
  @ROWTERMINATOR1 AS VARCHAR(20)
SELECT @srcfile='C:/Test.txt',
  @fieldTerminator1=';',
  @ROWTERMINATOR1='/n'
exec ('BULK  INSERT  tmp_txt_vendor  FROM  '''+@srcfile+'''  WITH ( FIELDTERMINATOR ='''+@fieldTerminator1+''', ROWTERMINATOR = '''+@ROWTERMINATOR1+''')')
select * from tmp_txt_vendor

--结果
/*
a1          a2               a3                                  a4
--------   -----------    ---------          -----------------------------------------
000001 深发展 2006-06-12 连续停牌,走势很好,继续持有
000002 万科 2006-06-12 放量下行,关注指标,注意回避
000817 辽河油田 2006-06-12 连续停牌,时间有限,即将退市
000818 锦化氯碱 2006-06-12 盘跌明显,仍有空间,注意回避
000819 岳阳兴长 2006-06-12 头部已明,后市走软,出货为妙
000820 金城股份 2006-06-12 连续停牌,高危个股,暂时不动
000821 京山轻机 2006-06-12 跌势显著,短线走弱,不可盲动
000822 山东海化 2006-06-12 放量下行,参考均线,建议不碰
000823 超声电子 2006-06-12 继续向下,仍有调整,不动为好
000825 太钢不锈 2006-06-12 阻力不强,继续上涨,持仓观望
000826 ST原宜 2006-06-12 盘弱风险,暂无机会,谨慎观望
000828 福地科技 2006-06-12 放量下行,可看均线,建议不碰
000829 赣南果业 2006-06-12 震荡平衡,关注成交,适当留意
000830 鲁西化工 2006-06-12 放量下行,量能重要,不可盲动
000831 关铝股份 2006-06-12 连续下调,未见起色,注意回避
*/
--出现乱编的解决办法: 一般把文件另存格式改为:Unicode 的格式文件即可

bulk insert批量数据导入

在SQL Server中,BULK INSERT是用来将外部文件以一种特定的格式加载到数据库表的T-SQL命令。该命令使开发人员能够直接将数据加载到数据库表中,而不需要使用类似于Integration...
  • soldierluo
  • soldierluo
  • 2012年08月15日 13:43
  • 683

ORACLE Bulk Binding批量绑定

 批量绑定(Bulk Binding)通过一次绑定一个完整的集合,然后在PL/SQL块内部按照数组进行数据处理来加快SQL语句的效率。通过两个DML语句:Bulk Collect和ForAll来实现。...
  • huanghui22
  • huanghui22
  • 2006年10月07日 16:56
  • 5796

SQL Server Bulk Insert 批量数据导入

SQL Server的Bulk Insert语句可以将本地或远程的数据文件批量导入到数据库中,速度非常的快。远程文件必须共享才行,文件路径须使用通用约定(UNC)名称,即"\\服务器名或IP\共享名\...
  • jiachangbin1989
  • jiachangbin1989
  • 2016年10月25日 15:04
  • 1867

利用Bulk Insert将Excel中的大批量数据入库

原创,转载请注明出处。//author:MeBack_黯然消魂小弟摸索了二天,终于搞定,不敢独享。第一次使用微软的SqlBulkCopy,其实它也是调用Bulk insert的,只不过微软封装了它,不...
  • iAudio
  • iAudio
  • 2007年11月01日 16:16
  • 778

SqlServer中BULK INSERT用法简介,批量插入数据

SqlServer中BULK INSERT用法简介,批量插入数据
  • u012726702
  • u012726702
  • 2016年06月24日 23:32
  • 1461

EF大数据批量处理----BulkInsert

这些扩展方法在哪里找 批量添加和EF本身自带的添加性能提高了多少 为什么扩展方法用的时间这么少之前做项目的时候,做出来的系统的性能不太好,在框架中使用了EntityFramework,于是就在网上查资...
  • u010853701
  • u010853701
  • 2015年06月28日 15:46
  • 10871

Oracle bulk Insert的用法

首先创建一个简单的数据库表: create table T_NAME (   id   NUMBER not null,   name VARCHAR2(20) ) alter table...
  • zxy838279821
  • zxy838279821
  • 2012年11月23日 17:26
  • 5262

(总结) SQL Server Bulk Insert 批量数据导入

From:http://rsljdkt.iteye.com/blog/1147707SQL Server的Bulk Insert语句可以将本地或远程的数据文件批量导入到数据库中,速度非常的快。远程文件...
  • u014461454
  • u014461454
  • 2014年03月31日 17:58
  • 325

SQL Server Bulk Insert批量数据导入

原文链接:http://www.2cto.com/database/201109/102689.html SQL Server的Bulk Insert语句可以将本地或远程的数据文件批量导入到数据库中...
  • piaoboyijianke1
  • piaoboyijianke1
  • 2013年02月17日 09:43
  • 417

SQLServer 大量数据导入表 csv bluk insert命令

SQLServer 中把一张 表a 中的内容导入到另外一张 表b 中,但表a和表b中的列字段名不一样;怎样才能简单点实现呢,下边介绍一个笨办法,哈哈。。。 以SQLServer2000为例: 1.打开...
  • liyanhui1001
  • liyanhui1001
  • 2011年04月02日 13:35
  • 1754
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BULK INSERT 实现批量数据导入
举报原因:
原因补充:

(最多只允许输入30个字)