2013-01-09 100 views
2

我正在處理舊的C++ MFC項目(> 10年)。數據庫應用程序適用於從MS Access(2007)遷移到MS SQL Server(2008 R2),我面臨着一些障礙。爲了導出數據,我使用了MS SQL Management Studio(菜單中的「導入」選項) 衆所周知,Access和MS SQL之間的數據類型存在一些差異。這變成了一些麻煩。將MS Access中的數據導出到MS SQL,並更改架構和表格

  1. 列 「ID」 從Access(自動編號,不爲空,主鍵)成爲在SQL Server(INT,不爲空,沒有任何自動遞增),只是平常列。所以在向表格中插入新行時出現了很多錯誤。

  2. 是/否鍵入Access(-1/0; NULL是不允許的)變成位(1/0/NULL),工作邏輯不應該被破壞,因爲在大多數地方是成爲對比不等於0:

    query.Select() .Buff( 「ID」,&代碼) .FromS( 「%TABLE_NAME%」,NULL) 。凡()STR(」 Aktiv <> 0「) .Execute();

尋找解決方案我看到了Access的advice to use SSMA(SQL Server遷移助理)。由於它重新創建了主鍵/外鍵,創建了CHECK的索引,它更好,更智能。但不幸的是,很多外鍵的行動更新/刪除操作變得不是級聯,但沒有行動。模式導入後的警告消息:

MS Access table%Table1%上的FOREIGN KEY約束「Reference77」可能導致循環或多個級聯路徑。表%Table2%到表%表1%中的級聯選項在SQL Server中設置爲No選項。

這並不是一個驚喜的應用程序在刪除對象時會出現一些錯誤,儘管它在Access中都是正常的。爲了測試,我選擇了一個刪除操作(在應用程序中)出現錯誤。我觀看了錯誤消息並更改了無動作 - >級聯通過SSMS(SQL Server Management Studio)參與FOREIGN KEYS。之後,應用程序中的刪除操作成功。

我的問題是:

  1. 我說得對不對,我只需要改變無動作 - >級聯爲外鍵來獲取數據庫應用程序可以工作完全正確的?或者可能會出現另一個我不知道的問題?
  2. 如何實現?我希望它是將它應用到客戶端的SQL Server上的一個很好的解決方案。

感謝您的幫助,我真的很感激它!

回答

4

感謝您的回答。我的問題的解決方案是...直接從Access(2010)導出數據到SQL Server。 我想:

  1. 「SQL Server導入和導出數據」,結果 - 從Access數據庫,沒有任何主oк外鍵,沒有轉型自動編號的與身份和自動增量列只有數據的複製。

  2. 訪問的SQL Server遷移助手,結果 - 許多外鍵丟失CASCADE屬性以進行更新/刪除操作。但所有其他事情都可以。

  3. Access 2010!數據庫工具 - > SQL Server - > ...使用嚮導 - >模式和數據都一切正常。應用程序適用於從Access導入的SQL Server數據庫。

所以從訪問SQL Server直接出口給所需的結果。

+2

未來讀者注意事項:在Access 2013中刪除了SQL Server升遷嚮導(推薦選項#3),因此[SQL Server遷移助理(AccessToSQL)](http://msdn.microsoft.com/ en-us/library/hh313039%28v = sql.110%29.aspx)(選項#2)可能是Access 2013及更高版本的最佳可用選項。 –

2
  1. 也許,但你仍然需要測試。

  2. 對於可重複使用的解決方案,我將編寫SSMA創建的數據庫(檢查所有類型和外鍵是否正確)。有了這個腳本,您可以在任意數量的服務器上創建一個空的SQL Server數據庫。 要填充這些數據庫,我會使用Integration Services包。使用導入嚮導很容易創建:通過所有步驟,但保存包而不是立即運行。然後你可以打開這個包並編輯它(添加數據轉換或任何其他必要的邏輯)。

相關問題