0

Access 2010 から SQL Server 2008 にアップサイズしようとしています。1 つのテーブルを除いてすべてが機能しています。テーブルは SQL Server で作成されますが、データはアップサイズされません。その理由は、Access に保存されている日付が 1 つの列に含まれているためです (例: 31/12/2013)。a)テキストファイルへのエクスポートもその日付列で失敗し、エラーメッセージには「範囲外の日付」が原因であることが明示されているため、これが真実であることがわかっていますが、要点は、b)それを削除した場合Access から列を取得してアップサイズを行うと、データがアップサイズされます。したがって、問題が実際には日付列にあることは間違いありません。

SSMA (SQL Server Migration Assistant) についても知っています。これは、アップサイジング ウィザードの欠点のために進化したようです。SSMA は私にとって選択肢のようには見えません。私は64ビットのWindows 7マシンを使用していますが、その道をたどろうとすると、「適切なバージョンのSSMA / Accessがありません」などの無限ループに陥ります。「Office の 64 ビット バージョンをインストールする必要があります」など。それはオプションではありません。

アップサイジング ウィザードが英国の日付を処理できないのは厄介ですが、そのようです。というわけで回避策を模索中。私は Access の専門家ではありません。私に思い浮かぶアイデアは次のとおりです。

  • テーブルをタブ区切りのテキスト ファイルにエクスポートし、SSIS を使用して移行し、派生列変換を実行してデータを取得します。

  • Access でテーブルに計算フィールドを作成し、新しい列にデータを取得して、元の列を削除します。(しかし、厄介なことに、それも機能しません。MS の指示に従って、 「Access は式ビルダーを表示します」と表示されますが、まあ... Access は式ビルダーを表示しません。

任意の提案をいただければ幸いです、ありがとう

4

1 に答える 1

0

醜い手動ハックを思いつきました。VBA の専門家が知っている、より洗練されたプログラムによる解決策がたくさんあることは間違いありませんが、私は今、より大きな問題を抱えており、問題を引き起こしている日付列は 1 つしかありません。しかし、Access についていくつかのことを学びました。ここでハックを共有します。

  • 古い (Access 2000) .MDB ファイルであるため、式ビルダーは表示されません。これを .accdb 形式に変換しました (Access 2010 の [保存して発行] で変換できます)。その後、テーブルの計算フィールドで式ビルダーを使用できるようになります。

  • 4 つの計算フィールドを作成しました。日付部分ごとに 1 つと、それらを連結するための最後のテキスト フィールド。次に、5 番目の (テキスト) 列を作成し、データ テーブル ビューの値を手動でコピーしました (ハックだと言いました)。計算列の式は次のとおりです (最初の 3 つの計算列が「TheYear」、「TheMonth」、および「TheDay」と呼ばれるとしましょう):

Year([TheBritishDate])
Month([TheBritishDate])
Day([TheBritishDate])

次に、計算されたテキスト列である連結列式と、1 桁の値を処理するためのいくつかの IIF 式を使用します (Access には "PAD" 関数がないように見えるため)。

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

これにより、「2013-12-31」など、SQL のような日付形式のテキスト フィールドが生成されます。

次に、テーブル内の列を選択し、Ctrl-C と Ctrl-V で新しい空のテキスト列を作成しました。次に、元の問題のある列と計算列を削除します。最終結果は、適切にフォーマットされた (テキスト) 列であり、エラーなくアップサイズでき、必要に応じて T-SQL で操作できます。

于 2013-07-15T21:13:52.380 に答える