使用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合法嗎? 是的,了解原因