BULK INSERT 实现批量数据导入

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值