利用bulk insert指令来将csv文件导入SQL Server

之前在网上下了许多csv格式的数据。通过数据库导入感觉有点麻烦,于是打算写个脚本来执行。通过搜索,发现用bulk insert指令可以完成这一功能。然而在执行的过程中,MSSQL总是报错称

  大容量加载失败。数据文件中第 1 行的第 46 列太长。请验证是否正确指定了字段终止符和行终止符。
  无法从链接服务器 "(null)" 的 OLE DB 访问接口 "BULK" 获取所需的接口("IID_IColumnsInfo")。

经过多次摸索总算解决了这一问题。

在导入之前,首先需要在自己的数据库下建立一个表,用以存放导入后的数据。在建立表的时候,就需要规定好各列的格式和名字。

create table table_name(
    colname_1 VARCHAR(100),
    colname_2 VARCHAR(100),
    colname_3 VARCHAR(100),
    ...
    ...
    colname_n VARCHAR(100),
) ;

我因为在导入的时候碰到了波折,为了控制变量查错,所以把格式统一设置为了varchar(100),到时候再改。
如果不想重新建立表,也可以通过

alter table table_name alter column column_name varchar(max)

其中varchar(max)为想要改的格式。

在建立了表格以后,就需要执行bulk insert指令了。
关于bulk insert指令详细的用法,可以参照http://blog.csdn.net/jackmacro/article/details/5959321这篇文章的内容。

我的csv文件中,
列之间用’,’分割,所以FIELDTERMINATOR属性设为’,’ ;
数据从第二行开始,所以FIRSTROW=2 ;
关于行分隔符,也就是ROWTERMINATOR的值,我看到的所有教程里面都是填’\n’,然而实际使用的时候不知道是什么情况,总是报错,也就是之前提到过的错误。经过多方查找,将行分隔符改为‘0x0a’以后,可以解决这个问题。
所以,此处的sql插入指令如下

bulk insert database_name.datatable_name
from 'file_path'
with(
    FIELDTERMINATOR=',',
    ROWTERMINATOR='0x0a' ,
    FIRSTROW=2
) ;

执行结果如下这里写图片描述可见指令有效

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值