Access ユーザーのための SQL Server 7.0/2000 移行ガイド

第 4 章 ‐ データベース移行

テクニカル リファレンス Access ユーザ-のための SQL Server 7.0/2000 移行ガイド」(発行 : 株式会社リックテレコム) より抜粋

本章では、Access データベースを SQL Server/MSDE に移行する方法、移行後の作業について説明します。

目次

4-1 データベース移行の実施
4-2 データベース移行後の作業

4-1 データベース移行の実施

4-1-1 SQL Server 7.0 へのデータベース移行

SQL Server 7.0 への移行
ここでは例として、Access 2000 のノースウィンドサンプルデータベースをアップサイジングウィザードを使用して、SQL Server 7.0 の新規データベースに移行する手順について説明します。

  1. Access 2000 がインストールされたマシンに、ログオンします。

  2. [ スタート ] メニュー→ [ プログラム ][Microsoft Access] をクリックし、Access 2000 を起動します。

  3. データベース移行の対象となAccess 2000 データベースファイルを読み込みます。ここでは、ノースウィンドサンプルデータベース「Northwind.mdb」を読み込みます (図 4-1)。

    sqlmitgd01

    図 4-1: データベースファイルの読み込み

  4. Access 2000 で、 [ ツール ] メニュー→ [ データベースユーティリティ ][ アップサイジングウィザード ] をクリックし、ウィザードを起動します (図 4-2)。

    Cc748746.sqlmitgd02s(ja-jp,TechNet.10).gif

    図 4-2: ウィザードの起動

  5. アップサイジングウィザードが表示されますので、 [ 新しいデータベースを作成する ] をチェックし、[ 次へ ]ボタンをクリックします (図 4-3)。

    sqlmitgd03

    図 4-3: アップサイジングウィザード

  6. 新規データベースの設定画面が表示されますので、SQL Server 名、ログイン ID、パスワード、データベース名を選択または入力し、 [ 次へ ]ボタンをクリックします (図 4-4)。SQL Server が開始されていない場合やログイン ID・パスワードが間違っている場合は、エラーとなりますので、注意してください。

    sqlmitgd04

    図 4-4: 新規データベースの設定画面

  7. アップサイズする Access テーブルの選択画面が表示されますので、[>>]ボタンをクリックし、すべてのテーブルを選択した上で、[ 次へ ]ボタンをクリックします (図 4-5)。

    sqlmitgd05

    図 4-5: テーブルの選択

  8. テーブルの属性等の設定画面が表示されますので、設定値を確認し、 ボタンをクリックします (図 4-6)。テーブルのインデックス、入力規則、既定値、リレーションシップ (DRI/トリガ) は、それぞれの属性を SQL Server に移行したあとに利用するかどうかを考えて、設定してください。また、タイムスタンプフィールド、テーブル構造だけのアップサイズオプションについては、SQL Server への移行をどのような順序でおこなう予定かなどを考えて、設定してください。

    sqlmitgd06

    図 4-6: テーブルの属性等の設定

  9. アプリケーションの変更画面が表示されますので、 [ 新しい Access クライアント / サーバーアプリケーションを作成する ] をチェックし、[ 次へ ]ボタンをクリックします (図 4-7)。

    sqlmitgd07

    図 4-7: アプリケーションの変更

    アプリケーションに対する変更について、表 4-1 に示します。

    表 4-1 アプリケーションに対する変更

    アプリケーションの変更

    説明

    変更なし

    Access フォーム、レポートに対する変更はおこないません。Access クエリのアップサイジングもおこないません。

    SQLServer のテーブルを既存のアプリケーションにリンクさせる

    Access 97 と同様な方法で、移行後の SQL Server のテーブルをリンクとして「見かけ上の取り込み」をおこない、クライアント側の既存テーブルは、「_ローカル」が付加されたテーブル名に変更されます。また Access フォーム、レポートについては、リンクしたテーブルに関連する部分を変更します。Access クエリのアップサイジングはおこないません。
    テーブルをリンクして利用する場合、テーブルのレコード更新と削除はできますが、新規テーブルの作成と既存テーブルの構造変更はできません。

    新しい Access クライアント/サーバーアプリケーションを作成する

    Access 2000 から追加されたプロジェクトファイル (*.ADP) が作成され、Access フォーム、レポートなどのユーザーインタフェースはクライアントである Access 側で管理されます。
    プロジェクトファイルでは、テーブルをリンクして利用する場合と異なり、テーブルの作成も可能となります。
    注意: MDE ファイルのアップサイズで、この指定をすると変換エラーとなります。

  10. 設定完了の画面が表示されますので、[ 完了 ]ボタンをクリックします (図 4-8)。

    sqlmitgd08

    図 4-8: 設定完了

  11. データベースの作成、テーブルのアップサイズの進行状況が表示されます (図 4-9)。

    sqlmitgd09

    図 4-9: 進行状況表示

  12. アップサイジングレポートが表示されます (図 4-10)。このレポートでは、データベースのファイル情報やエラー、設定値などが表示されます。アップサイジングレポートは、ユーザーフォルダ (Windows 2000 の場合は、「マイドキュメント」フォルダ) に、「Northwind.snp」というファイル名で保存されます。

    Cc748746.sqlmitgd10s(ja-jp,TechNet.10).gif

    図 4-10: アップサイジングレポート

  13. アップサイジングレポートをいったん閉じます。

  14. 移行後の Access プロジェクトファイルでは、オブジェクトに「ビュー」「ストアドプロシージャ」などが追加されています (図 4-11)。

    Cc748746.sqlmitgd11s(ja-jp,TechNet.10).gif

    図 4-11: 移行後の Access プロジェクトファイル

4-1-2 MSDE へのデータベース移行

MSDE への移行
Access 2000 からアップサイジングウィザードを使用してMSDEに移行する手順は、SQL Server 7.0 と同じです。

ワンポイント MSDE の管理

MSDE をインストールすると、サービスマネージャなどの基本的なユーティリティがインストールされます (表4-2)。これらのユーティリティは、 [ スタート ] メニュー→ [ プログラム ][MSDE] から起動できます。

ユーティリティ名称

説明

クライアントネットワークユーティリティ

MSDE に接続するクライアント側のネットワークライブラリを設定するツールです。

サーバーネットワークユーティリティ

MSDE に接続してくるクライアントを受信待ちするサーバー側のネットワークライブラリを設定するツールです。

サービスマネージャ

MSDE を構成する 3 つのサービスの開始/停止を管理するツールです。

データのインポートとエクスポート

データ変換サービス (DTS) ウィザードにより、他のデータベースなどからデータのインポート、データの変換、他のデータベースへのデータのエクスポートがおこなえます。

MSDE では、SQL Server の Enterprise Manager のようなデータベースを管理するグラフィカルユーティリティはサポートされていませんので、OSQL ユーティリティなどのコンソールプログラムでデータベースを管理する必要があります。OSQL ユーティリティなどは、\MSSQL7\Binn フォルダにインストールされます。

OSQL ユーティリティは、ODBC を使用して SQL Server/MSDE と通信し、Transact-SQL ステートメント、システムプロシージャ、スクリプトファイルの入力ができます。OSQL ユーティリティの構文を以下に示します。

osql -U login_id [-e] [-E] [-p] [-n] [-d db_name] [-Q "query"] [-q "query"]
[-c cmd_end] [-h headers] [-w column_width] [-s col_separator]
[-t time_out] [-m error_level] [-I] [-L] [-?] [-r {0|1}]
[-H wksta_name] [-P password] [-R]
[-S server_name] [-i input_file] [-o output_file] [-u] [-a packet_size]
[-b] [-O] [-l time_out]

OSQL ユーティリティの引数の説明を、表 4-3 に示します。

表 4-3 OSQL ユーティリティの引数

引数

説明

-U login_id

login_id にログイン ID を指定します。ログイン ID には、大文字と小文字の区別があります。

-e

入力のエコーを返却します。

-E

パスワードを使用せずに、信頼関係接続を使用します。

-p

パフォーマンス統計を出力します。

-n

入力行から行番号とプロンプト記号 (>) を削除します。

-d db_name

OSQL 起動時に、USE db_name ステートメントを実行し、使用データベースを設定します。

-Q "query"

クエリの実行後、OSQL を終了します。クエリは二重引用符で囲み、クエリに埋め込まれたものは単一引用符で囲みます。

-q "query"

OSQL 起動時に、クエリを実行しますが、クエリが完了しても OSQL を終了しません。クエリには、GO を含めないでください。

-c cmd_end

コマンド終端文字を指定します。既定では、GO だけが入力されている行があると、コマンドが終了したとみなされ、SQL Server に送られます。

-h headers

列ヘッダーの間に出力する行数を指定します。既定では、各クエリの結果に対して、ヘッダーは 1 つだけ表示されます。

-w column_width

出力用の画面幅を設定できます。既定値は、80 バイトです。出力行が画面幅の最大値を超えると、複数の行に分けて出力されます。

-s col_separator

列の区切り文字を指定します。既定値は空白です。オペレーティングシステムにとって特別な意味をもつ文字 (| ; & < > など) を使用するには、その文字を二重引用符 (") で囲みます。

-t time_out

コマンドの実行待ち時間を秒単位で指定します。time_out 値を指定しておかないと、コマンドは無限に実行されます。OSQL への既定のログイン待ち時間は、8 秒です。

-m error_level

エラーメッセージの表示をカスタマイズします。指定した重大度レベル以上のエラーが発生すると、メッセージ番号、状況、エラーレベルが表示されます。指定した重大度レベルより低いレベルのエラーの場合は、何も表示されません。-1を指定すると、単なる情報メッセージでも、メッセージと共にすべてのヘッダーが返されます。-1を使用する場合、パラメータと設定の間にはスペースを入れないでください (-m -1 ではなく、-m-1)。

-I

QUOTED_IDENTIFIER 接続オプションを有効にします。

-L

ローカルに設定されたサーバーと、ネットワーク上でブロードキャストしているサーバー名の一覧を表示します。

-?

OSQL の構文、引数の概要を表示します。

-r {0 | 1}

メッセージ出力を画面 (stderr) にリダイレクトします。パラメータを指定しない場合や、0 を指定した場合は、重大度レベル 17 以上のエラーメッセージだけがリダイレクトされます。1 を指定すると、"print" を含むすべてのメッセージ出力がリダイレクトされます。

-H wksta_name

ワークステーション名を指定します。ワークステーション名はシステムテーブル sysprocesses.hostname に格納され、ストアドプロシージャ sp_who により表示されます。指定されていない場合は、現在のコンピュータ名であるとみなされます。

-P password

ユーザーが指定するパスワードです。-P オプションを使用しない場合は、パスワードの入力画面が表示されます。コマンドプロンプトの最後にパスワードなしで -P オプションを使用すると、既定のパスワード NULL が使用されます。パスワードには大文字と小文字の区別があります。OSQLPASSWORD 環境変数を使用して、現在のセッションの既定のパスワードを設定できます。したがって、バッチファイルにパスワードを書き込む必要がありません。
-P オプションを使用してパスワードを指定しないと、OSQL は最初に OSQLPASSWORD 変数を調べます。値が設定されていないと、OSQL は既定のパスワード NULL を使用します。

-R

通貨、日付、および時刻データを文字データに変換するときに、SQL Server ODBC ドライバがクライアントの設定を使用することを指定します。

-S server_name

接続先の SQLServer/MSDE のサーバー名を指定します。server_name は、ネットワーク上のサーバーの名前です。ネットワーク上のリモートコンピュータから OSQL を実行するときは、このオプションが必要です。

-i input_file

SQL ステートメントまたはストアドプロシージャのバッチを含むファイル名を指定します。-i の代わりに小なり記号 (<) を使用することもできます。

-o output_file

OSQL からの出力を受信するファイル名を指定します。-o の代わりに大なり記号 (>) を使用することもできます。

-u

input_file の形式に関係なく、output_file を Unicode 形式で格納することを指定します。

-a packet_size

サイズの異なるパケットが要求できます。packet_size の有効値は512~65535 です。OSQL での既定値はサーバーの既定値と同じです。

-b

エラーが発生したときに、OSQL を終了し、DOS ERRORLEVEL 値を返すことを指定します。SQL Server エラーメッセージの重大度レベルが 10 以上のときは、DOS ERRORLEVEL 変数に返す値は 1 です。それ以外は 0 を返します。

-O

SQL Server 6.5 以前の ISQL ユーティリティの動作と一致するように、OSQL の一部の機能を使用不能にすることを指定します。

-l time_out

OSQL がログインタイムアウトになる時間を秒数で指定します。time_out の値を指定しないと、コマンドは無限に実行されます。OSQL への既定のログイン待ち時間は 15 秒です。

4-1-3 SQL Server 2000 へのデータベースの移行

SQL Server 2000 への移行
Access 2000 のアップサイジングウィザードでは、SQL Server 2000 への移行を正式にはサポートしていません。SQL Server 2000 への移行をおこなうとアップサイジングウィザードのデータベース選択画面で、エラーメッセージが表示されます (図 4-12)。このエラーは、SQL Server 7.0 と SQL Server 2000 のバージョン形式 (SELECT @@VERSION の結果) が異なるために、Access 2000 側がバージョンを判断できないために発生していますので、今後 Access 2000 のアップデートプログラムなどで対応されるかもしれません。

sqlmitgd12

図 4-12: エラーメッセージ

上記の理由で、Access 2000 から直接 SQL Server 2000 には移行できませんので、いったん、SQL Server 7.0 に移行し、SQL Server 2000 にバージョンアップする必要があります。バージョンアップは、SQL Server 2000 を新規インストールする場合とほぼ同じ操作でおこなえます。SQL Server 2000 の新規インストールについては、付録 -2 SQL Server 2000 **のインストール」**を参考にしてください。

4-2 データベース移行後の作業

4-2-1 実行結果の確認

概要
データベース移行後には、アップサイジングウィザードのレポートと、SQL Server/MSDE のユーティリティを使用して実行結果を確認します。

アップサイジングウィザードのレポートの確認
アップサイジングウィザードのレポートで確認する項目を、表 4-4 に示します。

表 4-4 アップサイジングウィザードのレポートでの確認項目

確認項目

内容

エラー

エラーの有無と、移行後のデータベースへの影響を検討します。

テーブル名、
フィールド名

Access と SQL Server/MSDE のテーブル/フィールド名称の対応を確認します。また、移行前に存在したテーブルがすべて移行されているかを確認します。

データ型

Access と SQL Server/MSDE のテーブル/フィールドデータ型の対応を確認します。

トリガ

参照整合性でトリガを指定した場合、どのようなトリガが生成されたかを確認します。

クエリ

エラーの有無と、アップサイズに使用したSQLを確認します。エラーがある場合は、4-2-2「変換対象外、変換エラーの対処」を参考にして手動でアップサイジングします。

テーブルの
従属関係

移行後の SQL Server/MSDE テーブルの従属関係を確認します。

SQL Server/MSDE での確認
SQL Server では、SQL Server Enterprise Manager を使用して確認をおこないます。MSDE では、OSQL ユーティリティで Transact-SQL を使用して確認をおこないます。確認項目を、表 4-5 に示します。

表 4-5 SQL Server/MSDE での確認項目

確認項目

内容

テーブル名、テーブル数

移行前に存在したテーブルがすべて移行されているかを確認します。

テーブルのレコード数、
テーブルのレコード内容

テーブルごとのレコード数を確認します。また、レコードの内容についても確認します。

主キー、外部キー

テーブルごとの主キー、外部キーを確認します。

フィールド名、データ型

テーブルのフィールド名、データ型を確認します。

トリガ

参照整合性でトリガを指定した場合、どのようなトリガが生成されたかを確認します。

ビュー

ビュー名、ビューの内容を確認します。

ストアドプロシージャ

ストアドプロシージャ名、ストアドプロシージャの内容を確認します。

SQL Server での確認操作例
ここでは、4-1-1「SQL Server 7.0 へのデータベース移行」で移行をおこなったノースウィンドサンプルデータベースを、SQL Server 7.0 の Enterprise Manager を使用して確認する場合の操作例について説明します。

  1. SQL Server がインストールされたマシン、または SQL Server の管理ツールがインストールされたマシンに、ログオンします。

  2. [ スタート ] メニュー→ [ プログラム ][Microsoft SQL Server 7.0][Enterprise Manager] をクリックします。SQL Server に接続されてない場合は、接続してください。

  3. Enterprise Manager で、 [ コンソールルート ][Microsoft SQL Server][SQL Server グループ ][( データベースサーバー名 )][ データベース ][NorthwindSQL][ テーブル ] を順にダブルクリックします (図 4-13)。移行されたテーブル名、テーブル数を確認します。

    Cc748746.sqlmitgd13s(ja-jp,TechNet.10).gif

    図 4-13: テーブル名、テーブル数の確認

  4. [ 仕入先 ] テーブル上で右クリックし、 [ テーブルを開く ][ 全行を返す ] をクリックします。テーブルのレコード数とレコード内容を確認します (図 4-14)。確認が終わったら、同様にほかのテーブルの確認もおこなってください。

    Cc748746.sqlmitgd14s(ja-jp,TechNet.10).gif

    図 4-14: テーブルのレコード数、レコード内容の確認

  5. [ 仕入先 ] テーブル上で右クリックし、 [ テーブルのデザイン ] をクリックします。テーブルの主キー、外部キー、フィールド名、データ型を確認します (図 4-15)。確認が終わったら、同様にほかのテーブルの確認もおこなってください。

    Cc748746.sqlmitgd15s(ja-jp,TechNet.10).gif

    図 4-15: テーブルのキー、フィールドの確認

  6. [ 受注 ] テーブル上で右クリックし、 [ すべてのタスク ][ トリガの管理 ] をクリックし、 [ 名前 ] で「受注_更新トリガ (dbo)」を選択します (図 4-16)。トリガの内容を確認します。確認が終わったら、同様にほかのテーブル・トリガの確認もおこなってください。

    sqlmitgd16

    図 4-16: トリガの確認

  7. Enterprise Manager で、 [ コンソールルート ][Microsoft SQL Server][SQL Server グループ ][( データベースサーバー名 )][ データベース ][NorthwindSQL][ ビュー ] を展開します (図 4-17)。移行されたビュー名を確認します。

    Cc748746.sqlmitgd17s(ja-jp,TechNet.10).gif

    図 4-17: ビュー名の確認

  8. [ 受注小計 ] ビュー上で右クリックし、 [ プロパティ ] をクリックします。移行されたビューの内容を確認します (図 4-18)。確認が終わったら、同様にほかのビューの確認もおこなってください。

    sqlmitgd18

    図 4-18: ビューの内容の確認

  9. Enterprise Manager で、 [ コンソールルート ][Microsoft SQL Server][SQL Server グループ ][( データベースサーバー名 )][ データベース ][NorthwindSQL][ ストアドプロシージャ ] を展開します (図 4-19)。移行されたストアドプロシージャ名を確認します。

    Cc748746.sqlmitgd19s(ja-jp,TechNet.10).gif

    図 4-19: ストアドプロシージャ名の確認

  10. [ 受注明細金額 ] ストアドプロシージャ上で右クリックし、 [ プロパティ ] をクリックします。移行されたストアドプロシージャの内容を確認します (図 4-20)。確認が終わったら、同様にほかのストアドプロシージャの確認もおこなってください。

    sqlmitgd20

    図 4-20: ストアドプロシージャの内容の確認

MSDE での確認操作例
ここでは、4-1-2「MSDE へのデータベース移行」で移行をおこなったノースウィンドサンプルデータベースを、OSQL ユーティリティで Transact-SQL を使用して確認する場合の操作例について説明します。MSDE のマシン名は MOTHER、データベース名は NorthwindSQL です。OSQL ユーティリティの結果は、すべてテキストファイル「result01.txt~result12.txt」に出力します。OSQL ユーティリティから使用してい るTransact-SQL、システムプロシージャの詳細については、SQL Server の「BooksOnline」を参照してください。

  1. MSDE がインストールされたマシンにログオンします。

  2. [ スタート ] メニュー→ [ プログラム ][ アクセサリ ][ コマンドプロンプト ] をクリックします。

  3. MSDE のインストールフォルダの下の \Binn フォルダに移動します。標準では、インストールフォルダは、「\MSSQL7」です。コマンドプロンプトでのフォルダの移動は、CD コマンドを使用します (CD \MSSQL7\Binn)。

  4. コマンドプロンプトで以下の入力をおこない、テーブルの一覧を表示します。移行されたテーブル名、テーブル数を確認します。

osql -S MOTHER -d NorthwindSQL -U sa -Q "sp_tables Null,dbo,Null, "'TABLE' ""-P > result01.txt

sp\_tables の第 4 引数は、TABLE をシングルクォート (') で囲み、さらにダブルクォート (") で囲みます。さらに、OSQL の -Q 引数で指定するために、ダブルクォートの前に円記号 (\\) を付加します。
  1. コマンドプロンプトで以下の入力をおこない、仕入先テーブルのレコード内容を表示します。同様にほかのテーブルの確認もおこなってください。

osql -S MOTHER -d NorthwindSQL -U sa -Q "select * from 仕入先" -P > result02.txt

  1. コマンドプロンプトで以下の入力をおこない、仕入先テーブルのレコード数を表示します。同様にほかのテーブルの確認もおこなってください。

osql -S MOTHER -d NorthwindSQL -U sa -Q "select count(*)from 仕入先" -P > result03.txt

  1. コマンドプロンプトで以下の入力をおこない、仕入先テーブルのフィールドを表示します。同様にほかのテーブルの確認もおこなってください。

osql -S MOTHER -d NorthwindSQL -U sa -Q "sp_columns 仕入先" -P > result04.txt

  1. コマンドプロンプトで以下の入力をおこない、仕入先テーブルの主キーを表示します。同様にほかのテーブルの確認もおこなってください。

osql -S MOTHER -d NorthwindSQL -U sa -Q "sp_pkeys 仕入先" -P > result05.txt

  1. コマンドプロンプトで以下の入力をおこない、仕入先テーブルの外部キーを表示します。同様にほかのテーブルの確認もおこなってください。

osql -S MOTHER -d NorthwindSQL -U sa -Q "sp_fkeys 仕入先" -P > result06.txt

  1. コマンドプロンプトで以下の入力をおこない、受注テーブルのトリガ一覧を表示します。同様にほかのテーブルの確認もおこなってください。

osql -S MOTHER -d NorthwindSQL -U sa -Q "sp_helptrigger 受注" -P > result07.txt

  1. コマンドプロンプトで以下の入力をおこない、受注テーブルの更新トリガの内容を表示します。同様にほかのテーブル、トリガの確認もおこなってください。

osql -S MOTHER -d NorthwindSQL -U sa -Q "sp_helptext 受注_更新トリガ" -P > result08.txt

  1. コマンドプロンプトで以下の入力をおこない、ビューの一覧を表示します。移行されたビュー名を確認します。

osql -S MOTHER -d NorthwindSQL -U sa -Q "sp_tables Null,dbo,Null, "'VIEW' "" -P > result09.txt

  1. コマンドプロンプトで以下の入力をおこない、受注小計ビューの内容を表示します。同様にほかのビューの確認もおこなってください。

osql -S MOTHER -d NorthwindSQL -U sa -Q "sp_helptext 受注小計" -P > result10.txt

  1. コマンドプロンプトで以下の入力をおこない、ストアドプロシージャの一覧を表示します。移行されたストアドプロシージャ名を確認します。

osql -S MOTHER -d NorthwindSQL -U sa -Q "sp_stored_procedures" -P > result11.txt

  1. コマンドプロンプトで以下の入力をおこない、受注明細金額ストアドプロシージャの内容を表示します。同様にほかのストアドプロシージャの確認もおこなってください。

osql -S MOTHER -d NorthwindSQL -U sa -Q "sp_helptext 受注明細金額" -P > result12.txt

4-2-2 変換対象外、変換エラーの対処

概要
ここでは変換対象外、変換エラーとなったクエリの対処について説明します。対処をおこなう際には、Access がインストールされているクライアントマシンに、SQL Server 管理ツールがインストールされていると、クエリのカットアンドペーストがおこなえ、移行作業効率が向上します。SQL Server での SQL 文の確認は、クエリアナライザを使用します。MSDE での SQL 文の確認は、OSQL ユーティリティを使用します。 まずはじめに、どのクエリがどのようなエラーになったかを考えます。ノースウィンドサンプルデータベースを移行した場合にアップサイジングレポートに表示されるクエリのエラーメッセージを表 4-6 に示します。

表 4-6 ノースウィンドでのエラー

No.

クエリ名

エラーメッセージ

説明

01

1997年売上高

このクエリはアップサイズできません。

CCur、DatePart 関数の変換エラー

02

1997年商品区分別売上高

アップサイズできませんでした。

「1997 年売上高」クエリがエラーのため変換エラー

03

支社別社員売上高

アップサイズできませんでした。

パラメータ (開始日、終了日) が不正のため変換エラー

04

商品区分別売上高

アップサイズできませんでした。

日付形式、ビュー要素指定が不正のため変換エラー

05

商品別四半期売上高

クロス集計クエリはアップサイズできません。

クロス集計クエリは、変換対象外

06

得意先と仕入先

ユニオンクエリはアップサイズできません。

ユニオンクエリは、変換対象外

07

年次売上高

このクエリはアップサイズできません。

Datetime 関数の変換エラー

08

納品書フィルタ

このクエリはフォームのパラメータに依存するためアップサイズできません。

フォームのパラメータに依存するクエリは、変換対象外

次に、エラーの発生したクエリの SQL 文を、Access 2000 の SQL ビューで確認します。例として、ノースウィンドサンプルデータベースでエラーとなった「1997 年売上高」クエリを取り上げます。

  1. Access 2000 がインストールされたマシンに、ログオンします。

  2. [ スタート ] メニュー→ [ プログラム ][Microsoft Access] をクリックし、Access 2000 を起動します。

  3. データベース移行の対象となる (移行前の) Access 2000 データベースファイルを読み込みます。ここでは、ノースウィンドサンプルデータベース「Northwind.mdb」を読み込みます。

  4. Access 2000 のオブジェクトで [ クエリ ] をクリックし、 [1997 年売上高 ] クエリをクリックし、[ デザイン ]ボタンをクリックします。

  5. デザインビューが表示されますので、テーブルのリレーションが表示されているエリアで右クリックし、 [SQL ビュー ] をクリックします。SQL 文が表示されますので (図 4-21) 、3-1-4「データベース移行の注意点」や SQL Server の「BooksOnline」などを参考にして、なぜエラー (または変換対象外) となったかを考えます。この例では、SQL Server でサポートされていない CCur関数を使用しているのと、SQL Server とパラメータの異なる DatePart 関数を使用しているため、変換エラーとなっています。

    Cc748746.sqlmitgd21s(ja-jp,TechNet.10).gif

    図 4-21: SQL ビュー

  6. 修正前の「1997 年売上高」クエリを以下に示します。Access の SQL ビューで右クリックし、 [ コピー ] をクリックして、クリップボードにコピーします。

SELECT DISTINCTROW 商品区分.区分名, 商品.商品名, Sum(CCur([受注明細].[単価][数量](1-[割引])/100)*100) AS 商品別売上高, "第 " & DatePart("q",[受注日]) & "四半期" AS 出荷期 FROM (商品区分 INNER JOIN 商品 ON 商品区分.区分コード = 商品.区分コード) INNER JOIN (受注 INNER JOIN 受注明細 ON 受注.受注コード = 受注明細.受注コード) ON 商品.商品コード = 受注明細.商品コード WHERE (((受注.出荷日) Between #1/1/1997# And #12/31/1997#)) GROUP BY 商品区分.区分名, 商品.商品名, "第 " & DatePart("q",[受注日]) & "四半期";

  1. [ スタート ] メニュー→ [ プログラム ][Microsoft SQL Server 7.0][ クエリアナライザ ] をクリックします。

  2. SQL Server 名、ログイン名を指定して、SQL Server に接続します。

  3. 手順 6. でコピーした SQL 文を貼り付け、SQL Server にあわせて修正します。修正後の「1997 年売上高」クエリを以下に示します。

SELECT DISTINCT 商品区分.区分名, 商品.商品名, Sum(Convert(money, [受注明細].[単価][数量](1-[割引])/100)*100) AS 商品別売上高, '第 '+ Convert(char(1), DatePart(q, [受注日])) + '四半期' AS 出荷期 FROM (商品区分 INNER JOIN 商品 ON 商品区分.区分コード = 商品.区分コード) INNER JOIN (受注 INNER JOIN 受注明細 ON 受注.受注コード = 受注明細.受注コード) ON 商品.商品コード = 受注明細.商品コード WHERE (((受注.出荷日) Between '1/1/1997'And '12/31/1997')) GROUP BY 商品区分.区分名, 商品.商品名, '第 ' + Convert(char(1), DatePart( q, [受注日])) + '四半期'

  1. クエリアナライザで SQL 文を実行します。実行は、緑の三角ボタンか、[ F5 ]キー、[ Ctrl ] + [ E ]キーでおこなえます (図 4-22)。

    Cc748746.sqlmitgd22s(ja-jp,TechNet.10).gif

    図 4-22: クエリアナライザ実行

  2. SQL 文が実行でき、実行結果が正しければ、SQL Server のビューとして登録します。SELECT 文の前に以下の 2 行を追加し、SQL 文を実行します。

CREATE VIEW _1997売上高 AS

**ヒント**  
Access のクエリは、パラメータがなく並べ替えがない場合は、SQL Server のビューとします。それ以外は、SQL Server のストアドプロシージャとします。
  1. クエリアナライザの実行結果で、「コマンドは正常に終了しました。」と表示されれば、SQL Server のビューの登録は完了していますので、SQL Server Enterprise Manager などで、ビューの確認をしてください。

クロス集計クエリの移行
クロス集計クエリは、通常の選択クエリと異なり、フィールドを行見出しと列見出しに分割し、合計・平均などの集計結果を表示するためのクエリです (図 4-23)。クロス集計クエリは、アップサイジングウィザードでは変換できません。

sqlmitgd23

図 4-23: クロス集計クエリの表示例

クロス集計クエリの例として、ノースウィンドサンプルデータベースでエラーとなった「商品別四半期売上高」クエリを取り上げます。修正前の「商品別四半期売上高」クエリを以下に示します。

TRANSFORM Sum(CCur([受注明細].[単価]*[数量]*(1-[割引])/100)*100) AS 商品別売上高 
SELECT 
 商品.商品名, 受注.得意先コード, Year([受注日]) AS 受注年 
FROM 
 商品 INNER JOIN 
 (受注 INNER JOIN 受注明細 ON 受注.受注コード = 受注明細.受注コード) 
 ON 商品.商品コード = 受注明細.商品コード 
WHERE 
 (((受注.受注日) Between #1/1/1997# And #12/31/1997#)) 
GROUP BY 
 商品.商品名, 受注.得意先コード, Year([受注日]) 
PIVOT 
 "Qtr" & DatePart("q",[受注日],1,0) In ("Qtr 1","Qtr 2","Qtr 3","Qtr 4"); 

Access 固有のクロス集計クエリ用SQL文の TRANSFORM と PIVOT が、SQL Server ではサポートされていませんので、SQL 文全体を見直して SQL Server のビューを作成する必要があります。

ヒント
このような多次元分析は、Excel 2000 ピボットテーブルや、SQL Server の OLAP Service を利用したほうが、分析の自由度は向上します。

修正後の「商品別四半期売上高」クエリを以下に示します。行見出し、列見出しをつくるため、2 つのビューに分割しています。

CREATE VIEW 商品別四半期売上高サブ 
AS 
SELECT 
 商品.商品名, 受注.得意先コード, Year([受注日]) AS 受注年, 
 DATEPART(q,[受注日]) AS 四半期, 
 SUM(([受注明細].[単価]*[数量]*(1-[割引])/100)*100) AS 商品別売上高 
FROM 
 商品 INNER JOIN 
 (受注 INNER JOIN 受注明細 ON 受注.受注コード = 受注明細.受注コード) 
 ON 商品.商品コード = 受注明細.商品コード 
WHERE 
 (((受注.受注日) Between '1/1/1997' And '12/31/1997')) 
GROUP BY 
 商品.商品名, 受注.得意先コード, Year([受注日]), DatePart(q,[受注日]) 
CREATE VIEW 商品別四半期売上高 
AS 
SELECT 
 商品名, 得意先.得意先名, 受注年, 
 SUM( CASE 四半期 WHEN 1 THEN 商品別売上高 ELSE 0 END ) AS Qtr1, 
 SUM( CASE 四半期 WHEN 2 THEN 商品別売上高 ELSE 0 END ) AS Qtr2, 
 SUM( CASE 四半期 WHEN 3 THEN 商品別売上高 ELSE 0 END ) AS Qtr3, 
 SUM( CASE 四半期 WHEN 4 THEN 商品別売上高 ELSE 0 END ) AS Qtr4 
FROM 
 商品別四半期売上高サブ INNER JOIN 得意先 ON 
 商品別四半期売上高サブ.得意先コード = 得意先.得意先コード 
GROUP BY 
 商品名, 得意先.得意先名, 受注年 

移行後のクロス集計クエリの表示を、図 4-24 に示します。

sqlmitgd24

図 4-24: 移行後のクロス集計クエリの表示

ユニオンクエリの移行
ユニオンクエリは、SQL クエリの一種で、複数のテーブルやクエリのデータを 1 つのレコードセットに結合するためのクエリです (図 4-25)。ユニオンクエリは、アップサイジングウィザードでは変換できません。

sqlmitgd25

図 4-25: ユニオンクエリの表示例

ユニオンクエリの例として、ノースウィンドサンプルデータベースでエラーとなった「得意先と仕入先」クエリを取り上げます。修正前の「得意先と仕入先」クエリを以下に示します。

SELECT 
 都道府県, 得意先名, 担当者名, "得意先" AS 関係 
FROM 
 得意先 
UNION 
SELECT 
 都道府県, 仕入先名, 担当者名, "仕入先" 
FROM 
 仕入先 
ORDER BY 
 都道府県, 得意先名 

SQL Server のビューでは、並べ替え (ORDER BY 句) がサポートされていませんので、ストアドプロシージャで実現します。 修正後の「得意先と仕入先」クエリを、以下に示します。

CREATE PROCEDURE 得意先と仕入先 
AS 
SELECT 
 都道府県, 得意先名, 担当者名, "得意先" AS 関係 
FROM 
 得意先 
UNION 
SELECT 
 都道府県, 仕入先名, 担当者名, "仕入先" 
FROM 
 仕入先 
ORDER BY 
 都道府県, 得意先名 

移行後のユニオンクエリの表示を、図 4-26 に示します。

sqlmitgd26

図 4-26: 移行後のユニオンクエリの表示

パラメータクエリの移行
パラメータクエリは、パラメータを実行時にクエリに渡し、条件を変更するクエリです。パラメータクエリのうち、フォーム上のコントロールに依存するクエリは、アップサイジングウィザードで変換エラーとなります。

パラメータクエリの例として、ノースウィンドサンプルデータベースでエラーとなった「納品書フィルタ」クエリを取り上げます。修正前の「納品書フィルタ」クエリを以下に示します。

SELECT DISTINCTROW 
 納品書.* 
FROM 
 納品書 
WHERE 
 (((納品書.受注コード)=[Forms]![受注]![受注コード])); 

SQL Server のビューでは、パラメータがサポートされていませんので、ストアドプロシージャで実現します。パラメータ付きのストアドプロシージャとなりますので、今まで Access パラメータクエリを利用していた Access フォームやレポートなどで、ストアドプロシージャへの切り替えと、入力パラメータの受け渡しが必要となります。 修正後の「納品書フィルタ」クエリを、以下に示します。

CREATE PROCEDURE 納品書フィルタ 
 @受注コード int 
AS 
SELECT DISTINCT 
 納品書.* 
FROM 
 納品書 
WHERE 
 納品書.受注コード = @受注コード 

* この文書は株式会社リックテレコムの協力により書籍の一部を抜粋したものです。

Microsoft および Office は米国 Microsoft Corpotation の米国及びその他の国における登録商標または商標です。