2011-03-15 66 views
0

我有大約20個訪問數據庫,1990-2010年每年一個。每個數據庫都有幾乎相同的表格,但是這些表格中的唯一數據。 (有一些獨特的表,但它們不是很重要。)將幾個相似的MS-Access數據庫合併到一個SQL數據庫中

我正在使用SQL Server遷移助理進行訪問,但到目前爲止,我只能弄清楚如何將一個訪問數據庫遷移到一個SQL數據庫。是否有可能之一:

  1. 使用SSMA每個數據庫導入到我的SQL服務器,而追加而不是覆蓋已經存在於目標數據庫
  2. 使用SQL合併20個數據庫(我後桌進口每一個),將任何類似的表格附加在一起

每個數據庫都有幾百個表,所以我試圖避免手動解決方案。

謝謝!

+0

它確實取決於列中的數據。很可能你必須按照數據將所有數據全部放入每個Access數據庫中的表中。 IE:如果表中沒有年份值來區分數據(假設有必要),您必須手動提供。 – 2011-03-15 19:39:04

+0

@OMG小馬:每個表已經有一年的價值,並且我相當確定這些列在名稱相同的表中是相同的。我想簡單地在同名表格中附加所有數據會得到我想要的。我只是不知道在〜20個不同的數據庫中有200個表格的有效方法。 – Zach 2011-03-15 19:56:20

+0

您可能還需要向所有表中添加一個字段以指示源數據庫,以便您可以將它用作複合PK的一部分以及自動編號值(假設您將它們用作代理PK)。這是避免衝突並維護表之間的RI的唯一方法。 – 2011-03-15 19:59:27

回答

1

如果您知道每個數據庫中的數據結構都是相同的,那麼只要在每個數據庫中具有相同的名稱,就可以執行一些花哨的動態SQL和sp_msforeachtable來合併每個表。

我想是這樣的:

DECLARE @SQL Varchar(max) 

SET @SQL =' 
SELECT * 
INTO MergedDb.? 
FROM DB1.? 
UNION ALL 
SELECT * 
FROM DB2.? 
UNION ALL 
SELECT * 
FROM DB3.? 
...' 

exec sp_MSforeachtable @SQL 

這將恰當地處理數據類型的衝突,如果您有任何標識值,這將無法工作。

+0

我認爲這可能工作。我很確定數據庫中的數據類型是一致的,所以不應該有任何問題。我會讓你知道它是否有效。 – Zach 2011-03-15 20:07:10

+0

@Zach - 要非常小心! – JNK 2011-03-15 20:08:27

+0

謝謝,我會!我在另一臺機器上備份了數據,所以如果我真的搞砸了,我可以將訪問數據庫重新導入到SQL中。 – Zach 2011-03-15 20:15:03

1

你必須手工完成每個數據庫,但你可以嘗試使用sql server的數據導入嚮導。

1

對全局數據庫進行適當的規範化設計。然後將20個MDB導入到20個SQL數據庫,並通過手動或腳本或兩者的組合來整合。我的猜測是,它會更快手動。

相關問題