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

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

①要导入的数据如下:

 

 

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

但是,我们使用了

 

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

②导入数据之后,发现数据出现了问题。

 

 

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

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

 

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

这条语句使用的时候,只能一张表一张表的导入,也就失去了批量导入的意义了。
而且直接写在我们的bat文件中还会提示

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

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

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

下面是-E 参数的详细介绍,

 
  1. -E   
  2. Specifies that identity value or values in the imported data file are to be used for the identity column. If -E is not given, the identity values for this column in the data file being imported are ignored, and SQL Server automatically assigns unique values based on the seed and increment values specified during table creation.   
  3.  
  4. If the data file does not contain values for the identity column in the table or view, use a format file to specify that the identity column in the table or view should be skipped when importing data; SQL Server automatically assigns unique values for the column. For more information, see DBCC CHECKIDENT (Transact-SQL).  
  5.  
  6. The -E option has a special permissions requirement. For more information, see "Remarks" later in this topic.  
  7.  

 

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

本文出自 “幽灵柯南的技术blog” 博客,请务必保留此出处http://enetq.blog.51cto.com/479739/912093

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 bcp 或 sqlcmd 导入数据,您需要遵循以下步骤: 1. 创建数据表:在 SQL Server 数据库中创建一个数据表,该表将用于存储导入数据。 2. 准备数据文件:将要导入数据保存到一个文本文件中,每行表示一条记录,字段值之间用分隔符分隔。 3. 确定分隔符:确定数据文件中用于分隔字段值的分隔符。 4. 使用 bcp 命令或 sqlcmd 命令导入数据:使用以下命令之一导入数据: - bcp 命令:使用 bcp 命令从数据文件中导入数据到 SQL Server 数据库中的表中。该命令使用以下语法:bcp database.schema.table in datafile -S servername -U username -P password -c -t separator - sqlcmd 命令:使用 sqlcmd 命令从数据文件中导入数据到 SQL Server 数据库中的表中。该命令使用以下语法:sqlcmd -S servername -d database -U username -P password -i scriptfile 在这些命令中,您需要替换以下参数: - database:要导入数据数据库名称。 - schema:要导入数据的表所在的架构名称。 - table:要导入数据的表名称。 - datafile:包含要导入数据的文件的路径和文件名。 - servername:SQL Server 实例的名称。 - username:连接到 SQL Server 的用户名。 - password:连接到 SQL Server 的密码。 - separator:数据文件中用于分隔字段值的分隔符。 以上是使用 bcp 或 sqlcmd 导入数据的基本步骤和命令。您可以根据需要进行调整或添加其他参数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值