2013-07-15 154 views
0

我試圖從Access 2010升遷到SQL Server 2008.所有的工作除了一個表;該表在SQL Server中創建,但沒有數據變大。原因是,一個列包含一個日期,存儲在Access中的日期是英國格式(例如2013年12月31日)。我知道這是真實的,因爲a)導出到文本文件也失敗與該日期列,錯誤消息明確表示,這是因爲「日期超出範圍」,但更重要的是,b)如果我刪除來自Access的列,並進行升遷,數據得到升遷。所以毫無疑問,問題實際上就是日期欄。升級訪問SQL英國與美國的日期格式

是的,我知道SSMA(SQL Server遷移助理),這似乎是由於升遷嚮導的缺點而演變而來的。 SSMA似乎不適合我。我在一臺64位的Windows 7機器上,當我試圖走上這條路時,我陷入了無休止的「你沒有正確版本的SSMA/Access」等等; 「你需要安裝64位版本的Office」等;這不是一個選項。

令人煩惱的是,升遷嚮導無法處理英國的日期,但似乎是這樣。所以我試圖找出一個解決方法。我不是Access專家。發生在我的想法包括:

  • 導出表的製表符分隔文本文件,然後使用SSIS遷移它,做一個派生列轉換來獲取數據

  • 創建一個計算在Access中的表中的字段,將數據獲取到新列中,並刪除原始列。 (不過,也煩人,這不是任何工作。我跟隨the instructions from MS和它說:「Access顯示錶達式生成器」,以及...訪問不顯示錶達式生成器

讚賞任何建議,謝謝

+0

你能找到一個32位的機器來運行SSMA嗎? –

回答

0

我想出了一個醜陋的手動破解程序,毫無疑問VBA專家會知道有很多更優雅的程序化解決方案,但我現在有更大的魚來炒,而且只有一個日期列是但是我確實學到了一些關於Access的東西,我會在這裏分享它的價值,無論它的價值如何,

  • 表達式生成器不會出現,因爲它是舊的(Access 2000).MDB文件。我將它轉換爲.accdb格式(保存&發佈,在Access 2010中,可讓您轉換)。然後,表達式構建器可用於表中的計算字段。

  • 我創建了四個計算字段;一個用於每個日期部分,一個用於連接它們的最終文本字段;然後我創建了第五個(文本)列,並手動複製數據表視圖中的值(我告訴你這是一個黑客攻擊)。爲計算列的表達水平(假設前三計算的列被稱爲 '的某些地方', 'TheMonth' 和 'TheDay'):

年([TheBritishDate])
月([TheBritishDate] )
Day([TheBritishDate])

然後,連接列表達式(這是一個計算文本列)和一些IIF表達式來處理單個數字值(因爲似乎沒有任何「PAD 「Access中的函數):

[TheYear] +' - '+ IIf(Len( [TheMonth])= 2,[TheMonth],'0'+ [TheMonth])+' - '+ IIf(Len([TheDay])= 2,[TheDay],'0'+ [TheDay])

這產生一個像SQL這樣的日期格式的文本字段:例如'2013-12-31'。

然後,我只是選擇表中的列Ctrl-C和Ctrl-V到一個新的空白文本列。然後刪除原始的違規列和計算的列。最終的結果是一個格式正確的(文本)列,然後可以升級而不出錯,並根據需要在T-SQL中進行操作。

相關問題