使用DBCC CheckIdent进行Bulkcopy插入

时间:2010-04-22 11:12:49

标签: sql-server sql-server-2008 sqlbulkcopy batch-processing dbcc

我们的团队需要在SQL Server 2008数据库中插入大量数据。我们正在寻找一个好的解决方案。现在我们想出了一个,但我对它有疑问,只是因为它感觉不对。所以我在这里问这是否是一个很好的解决方案。额外的挑战是它是4个服务器上的点对点复制数据库! :)

想象一下,我们有100万行要插入

  1. 开始交易
  2. 在包含100万
  3. 的表格上增加当前标识值
  4. 准备好100万行DataSet / DataTable和正确的ID
  5. 将数据批量复制到数据库中
  6. 提交交易
  7. 这是一个很好的解决方案,我们是否会遇到并发问题,交易过多等等。

1 个答案:

答案 0 :(得分:0)

如果数据库在线并且用户可以在该表中插入行,那么您只会遇到问题(据我所知,所以可能会有一些我忽略的事情!)。增加元级别上新行的标识值只是意味着系统插入的下一行将使用该数字,因此如果您使用该数字进行增加,则意味着您预先保留了这些数字。

标识列“很好”,但副作用是它们不可转移。因此,如果您必须将数据迁移到另一个数据库,请意识到您可能必须调整插入的数据以匹配您插入的数据库(因为这是数据的范围,这意味着标识字段可能与表中已有的行冲突)。

如果这是一次性的事情,它可能会成功。如果您计划定期执行此操作,我会查看更高级别的迁移系统,您可以将数据迁移到新的标识值,或者使用带有NEWSEQUENTIALID()的guid,以便获得正确的检查索引以及唯一的可转移ID