Java调用BCP导入数据到数据库解决标识列ID问题

  前面的一篇博文讲解了调用bcp批量导出数据,对于批量导入数据则写的不怎么详细,本文再详细的介绍下一个使用技巧。对于批量导入,如果表中含有标识列,则默认会按照Sql Server 的处理方式来处理这个标识列,因此也就不是我们需要的ID值了,本文我们一起来探讨下解决方法。

  。

  ①要导入的数据如下:


  红框框的则是标识列,自动增长。

  但是,我们使用了

  bcp sportSys.dbo.competitions in %1competitions.xls -c -T >>%2import.txt

  ②导入数据之后,发现数据出现了问题http://heilongjiangfuzhuang.com。

  可以很清晰的发现,ID变了,由此带来的问题也就可想而知了,怎么解决这个问题呢?

  有人提出了下面的这种做法:

  SET IDENTITY_INSERT tb ON--把显式值插入表的标识列中。 INSERT INTO..... SET IDENTITY_INSERT tb OFF--完成之后关闭选项

  这条语句使用的时候,只能一张表一张表的导入,也就失去了批量导入的意义了。

  而且直接写在我们的bat文件中还会提示

  SET IDENTITY_INSERT sportSys.dbo.compet itions on 环境变量 IDENTITY_INSERT sportSys.dbo.competitions 没有定义

  经查阅文档发现,bcp已经为我们提供了一个非常好的解决方法,加上-E

  这个参数,即可解决标识列的问题!

  如果bcp导入的时候,没有加入sducc1122-E这个参数,则对于目标表中的标识列的处理则由Sql Server 自动的来处理,因此得出的ID值就不是我们想要的了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值