【问题标题】:Bulkcopy inserts with DBCC CheckIdent使用 DBCC CheckIdent 进行批量复制插入
【发布时间】:2011-02-11 00:35:30
【问题描述】:
我们的团队需要向我们的 SQL Server 2008 数据库中插入大量数据。我们正在寻找一个好的解决方案。现在我们想出了一个,但我对此表示怀疑,只是因为它感觉不对。所以我在这里问这是否是一个好的解决方案。额外的挑战是它是一个超过 4 台服务器的对等复制数据库! :)
假设我们有 100 万行要插入
- 开始交易
- 将表上的当前标识值增加 100 万
- 准备好包含 100 万行和正确 ID 的 DataSet/DataTable
- 将数据批量复制到数据库中
- 提交事务
这是一个好的解决方案吗?我们可能会遇到并发问题、事务过大等问题。
【问题讨论】:
标签:
sql-server
sql-server-2008
sqlbulkcopy
batch-processing
dbcc
【解决方案1】:
如果数据库在线并且用户可以将行插入到该表中,您只会遇到问题(据我所知,因此可能会忽略一些事情!)。在元级别上增加新行的标识值仅意味着系统插入的下一行将使用该数字,因此,如果您将其增加 100 万,则意味着您预先保留了这些数字。
身份列很“不错”,但具有不可转移的副作用。因此,如果您必须将数据迁移到另一个数据库,请意识到您可能必须调整插入的数据以匹配您插入的数据库(因为这是数据的范围,这意味着身份字段可能与表中已有的行发生冲突)。
如果这是一次性的事情,它可能会成功。如果您打算定期执行此操作,我会研究一个更高级别的迁移系统,您可以在其中将数据迁移到新的身份值或将 guid 与 NEWSEQUENTIALID() 一起使用,以便获得正确的检查索引以及唯一的、可转移的 id .