SQLServer Bulk insert 操作

SQLServer Bulk insert 操作

之前一直使用的方式为:jdbc batch insert,多条数据做一次提交,由于此方法太慢了,发现sqlserver 有bulk insert 这种提交方式,具体操作如下:

1. 创建sqlserver 表

CREATE TABLE [dbo].[bulk_test] (
  id varchar(200),
  name nvarchar(200),
  age varchar(200),
  sex varchar(200),
)

2. 生成待导入文件

1,张三,18,M;
2,李四,19,M;
3,王五,20,M

该文件最终保存为:student.txt

3. 上传数据

需要将文本数据上传至sqlserver服务所在目录,比如:
sqlserver 服务部署在192.168.1.111,此刻将student.txt 上传至目录:/tmp
最终位置:/tmp/student.txt

4. 导入数据

BULK insert bulk_test from '/tmp/student.txt' WITH
(
	datafiletype='widechar',
    FIELDTERMINATOR = ',',  
    ROWTERMINATOR = ';',   
    TABLOCK
)

-- 解释
FIELDTERMINATOR:column 分割符
ROWTERMINATOR : 行分割符

5. 注意事项

1. 文件分行符
正确的格式如下所示:
1,张三,18,M;
2,李四,19,M;
3,王五,20,M

如果你的格式是这样的:
1,张三,18,M;
2,李四,19,M;
3,王五,20,M;
报错如下:
[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]Bulk load: An unexpected end of file was encountered in the data file. (4832)
[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error. (7399)
[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)". (7330)

总结:最后一行数据不需要分行符

2. 中文乱码问题

这个问题很多,我目前导入的方法如下:

  1. 写txt文件,最后用unicode编码格式保存
  2. 中文字段类型用:nvarchar
  3. BULK insert 语句中添加:datafiletype=‘widechar’

最终导入中文正常,无乱码现象

1 张三 18 M
2 李四 19 M
3 王五 20 M

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值