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. 中文乱码问题
这个问题很多,我目前导入的方法如下:
- 写txt文件,最后用unicode编码格式保存
- 中文字段类型用:nvarchar
- BULK insert 语句中添加:datafiletype=‘widechar’
最终导入中文正常,无乱码现象
1 张三 18 M
2 李四 19 M
3 王五 20 M