2009-01-21 75 views
1

我有兩個不同的機器上運行相同的數據庫。數據庫廣泛使用了Identity列,並且表格發生了非常可怕的衝突。我現在想把這兩者合併在一起,然後整理出我可能做的一些問題Sql 2005數據遷移

A)使用GUID(unweildy但是無處不在)B)分配標識範圍,類型naff,但意味着你仍然可以訪問按順序記錄,敲出基本的Sql並輕鬆地選擇記錄,並確定哪臺機器產生了數據。

我的問題是,在其中一個數據庫上重新鍵入(即更改主鍵)的最佳方式是什麼,以便數據不再發生衝突。我們只看6張牌桌,但在3張牌桌上有很多行〜2M。

更新 - 是否有任何真正的SQL代碼在那裏,這樣做,我知道關於身份插入等。我已經解決了這個問題在許多優雅的方式之前,我正在尋找優雅的解決方案,最好有一個很好的TSQL SP做驢工作 - 如果這不存在,我會將它編碼並放在wiki上。

+0

請參閱http://stackoverflow.com/questions/230006/renumber-primary-key – Galwegian 2009-01-21 10:29:47

回答

0

一個簡單的方法是將一個數據庫上的所有密鑰更改爲固定增量,例如10,000,000,並且它們將排隊。爲了做到這一點,您必須關閉應用程序,以便數據庫保持安靜,並放棄受此影響的所有FK引用,並在完成時重新創建它們。您還必須將所有受影響的標識列上的種子值重置爲適當的值。

某些表格將成爲參考數據,如果不同步,這些數據將會更加複雜。您可能會遇到衝突代碼問題,這些代碼在不同實例或具有不同含義的相同代碼上具有相同的意義。這可能會也可能不是您的應用程序的問題,但如果這些實例已經在沒有協調的情況下運行,您可能需要仔細檢查。

另外,如果名稱和地址數據不是,那麼可能會不同步,如果沒有這些數據的規範來源。您可能需要將它們排除,運行匹配的查詢並讓業務整理任何異常情況。

0

我會先在表格中添加另一列,然後用新的Primary key填充。

然後,我會使用更新語句來更新所有相關表中新的foreign key字段。

然後您可以刪除舊的Primary key和舊的foreign key字段。