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 的格式文件即可

相关文章推荐

SQL Server Bulk Insert批量数据导入

原文链接:http://www.2cto.com/database/201109/102689.html SQL Server的Bulk Insert语句可以将本地或远程的数据文件批量导入到数据库中...

bulk insert批量数据导入

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

使用 BULK INSERT 或 OPENROWSET(BULK...) 导入批量数据 (SQL Server)

本主题适用于: SQL Server(从 2016 开始)Azure SQL 数据库Azure SQL 数据仓库并行数据仓库 本主题概述了如何使用 Transact-SQL BULK INS...
  • hejisan
  • hejisan
  • 2016年09月24日 17:01
  • 441

bulk insert导入数据

  • 2012年03月05日 15:36
  • 900B
  • 下载

Bulk Insert:将文本数据(csv和txt)导入到数据库中

将文本数据导入到数据库中的方法有很多,将文本格式(csv和txt)导入到SQL Server中,bulk insert是最简单的实现方法 1,bulk insert命令,经过简化如下 BULK...
  • dz45693
  • dz45693
  • 2017年01月07日 08:59
  • 501

Bulk insert如何导入部分字段的数据

IF OBJECT_ID('Employee') IS NOT NULLDROP TABLE EmployeeGOCREATE TABLE Employee(Id int,Name VARCHAR...

用BULK INSERT命令导入数据详解

如果你从事与数据库相关的工作,有可能会涉及到将数据从外部数据文件插入倒SQL Server的操作。本文将为大家演示如何利用BULK INSERT命令来导入数据,并讲解怎样通过改变该命令的一些选项以便更...
  • zw_2011
  • zw_2011
  • 2012年04月20日 10:12
  • 1853

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

在实际的工作需要中,我们有时候需将大量的数据导入到数据库中。这时候我们不得不考虑的就是效率问题。本文我们就介绍了一种将大量数据高效地导入SQL Server数据库的方法,该方法是使用BULK INSE...

批量bulk insert 原理不明白之处 求解答

cursor cur_avg_score is --返回数量有500万行 select c.name,course_name, avg(score) from ( select student_...

执行数据导入的Bulk Insert与Insert Into

通过实际的操作以及使用,我们不难发现Sql Server的BULK INSERT在导入外部数据时相对于Insert Into效率要高得很多, 在数据量较大的时候,同样的情况下从文本中读取一行记录执行...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BULK INSERT 实现批量数据导入
举报原因:
原因补充:

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