前面的一篇博文讲解了调用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值就不是我们想要的了。