Access形式 (MDB) を SQL Server形式 (MDF) に変換する方法

サンプル コードのダウンロード (vbmigtips_Conversion.msi, 269 KB)

※ このサンプルをインストールするには Visual Studio 2005 が必要です。

Access の MDB 形式のデータファイルを SQL Server の MDF 形式のデータファイルに変換したい場合があると思います。そこで今回、Access で作成した MDB 形式ファイルを SQL Server の MDF 形式ファイルに変換する方法について紹介します。

Access の MDB 形式のデータファイルを SQL Server の MDF 形式のデータファイルに変換する場合、SQL Server Management Studio の[SQL Server インポートおよびエクスポートウィザード]を使用することで簡単に変換できます。

まず、SQL Server Management Studio を起動し、データベースエンジンサーバーに接続します。次に、接続したサーバー名を展開し、[データベース]の[システムデータベース]の下にあるデータベースを選択し、右クリックします。次に[タスク]メニューの[データのインポート]を選択します (図1) 。


図1

すると、[SQL Server インポートおよびエクスポートウィザード]が起動します。トップ画面で[次へ]ボタンを選択します。次の[データソースの選択]画面では、変換元のデータを設定します。今回、Microsoft Access で生成された mdb ファイルを変換するため、[データソース]欄のリスト一覧から[Microsoft Access]を選択し、[ファイル名]欄に変換するファイルのパスを指定します (図2) 。


図2

図2 で[次へ]ボタンを選択し、[変換先の選択]画面で、変換先の選択を行います。[変換先]欄のリスト一覧から[SQL Native Client]を選択し、サーバー名を指定します。そして、変換先のデータベースを指定し、[次へ]ボタンを選択します (図3) 。


図3

図3 の[データベース]欄で指定したデータベース名と同名のデータベースが存在しない場合、新たに指定した名前のデータベースが生成されます。今回は、IndividualList データベースが存在しないため新規作成されます。データベースを新規作成する場合、[新規作成]ボタンの選択によって表示される[データベースの作成]ウィンドウを使用することで、データファイルやログファイルのサイズを設定することができます。

次に、[テーブルのコピーまたはクエリの指定]画面で、データのコピー方法を設定します。コピー方法には、「既存のテーブルまたはビューからデータをコピーする方法」と「SQL クエリを使用する方法」の 2 通りがあります。今回は、既存のテーブルとビューからデータをコピーするため、[1つ以上のテーブルまたはビューからデータをコピーする]を選択します (図4) 。


図4

図4 で[次へ]ボタンを選択し、[コピー元のテーブルおよびビューを選択]画面で、コピーする既存のテーブルまたはビューを選択します (図5) 。


図5

図5 の[マッピング]列の[編集]ボタンを選択すると、[列マッピング]ウィンドウが表示されます。このウィンドウを使用して、変換先のテーブル内の行を削除したり、追加したりすることができます (図6) 。


図6

図5 の[次へ]ボタンを選択し、SSIS パッケージを保存するか否かを指定する[パッケージの保存および実行]画面で、[すぐに実行する]をチェックし、[次へ]ボタンを選択します。すると、[ウィザードの完了]画面が表示されます。ウィザードで選択したこれまでの設定内容を確認し、[完了]ボタンを選択します。これにより、変換元からデータを読み込み、変換し、変換先のデータベースにコピーされます。このとき、進行状況が表示されます (図7) 。


図7

インポート実行後、結果が表示されます。

以上の操作を行うことで、図8 のように、Access の MDB 形式ファイルを SQL Server の MDF 形式ファイルに変換することができます (図8 は、List テーブルを比較したものです) 。


図8

このように、[SQL Server インポートおよびエクスポート ウィザード]を使用することで、Access の MDB 形式ファイルを SQL Server の MDF 形式ファイルに変換することができます。しかし、ここで注意しなければいけないのは、各列のデータ型が変更されることです。

たとえば、List テーブル (図8) の[ID]は、数値型から int 型に、[Name]は、テキスト型から nvarchar 型 (サイズ 50) に変換されます。


図9

List テーブルでは特にデータ型が変更されたからといって、データ表記に違いはありません。しかし、図10 のように、表記が変更される場合もあります。


図10

図10 の[Birthday]では、日付/時刻型から datetime 型に変換され、データの表記も、日付から日時になります。また、[Check]では、Yes/No 型から bit 型に変換され、データ表記も、チェックボックスによるオンオフから True/False の表記に変換されます (図11) 。


図11

また、[〒]と[Tel]のデータを図10 で比較してもわかるように、データの表記が変更されています。これは、Access で、データを入力するときに使用する書式 (定型入力) が継承されていないためです。

Access での設定が継承されないのは、各列の定型入力だけではありません。Access で作成したクエリもまた継承されません。図5 の[コピー元のテーブルおよびビューを選択]画面でもわかるように、クエリもまたテーブル同様にインポートの対象となっていますが、テーブルとしてコピーされます。そのため、図12 のように表記上同じでも、二つのテーブルが結合して表記されたものではありません。


図12

このため、複数のテーブルを結合した Access の[ListData]クエリと同等のビューを作成したい場合は、対象となるテーブルをインポート後、独自に SQL Server にて作成する必要があります。