使用DBCC CheckIdent进行Bulkcopy插入

batch-processing dbcc sqlbulkcopy sql-server sql-server-2008

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

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

  1. 开始交易
  2. 增加100万个表上的当前标识值
  3. 准备好具有100万行和正确ID的DataSet / DataTable
  4. 将数据批量复制到数据库中
  5. 提交交易

这是一个很好的解决方案,我们可能会遇到并发问题,有太大的交易等等。

热门答案

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

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

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



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因