互換性のない Access の機能 (AccessToSQL)

すべての Access データベース機能が SQL Server と互換性があるわけではありません。 たとえば、SQL Server と Access では、予約キーワードのセットが異なります。 このような問題によって、SQL Server への正常な移行が妨げられる可能性があります。 考えられる移行の問題とその対処方法について、次の表に示します。

移行に影響する可能性があるデータベース設定または機能

Access データベースの設定または機能 移行の問題
Access のテーブルに、一意なインデックスがない。 一意なインデックスを持たないテーブルが SQL Server に移行された場合、移行後にテーブルを変更することはできません。 これにより、アプリケーションの互換性の問題が発生する可能性があります。

Access データベース オブジェクトを変換すると、[出力] ウィンドウに、一意なインデックスを持たない Access テーブルが一覧表示されます。

変換中に SQL Server テーブルに主キーを追加するように Access を構成できます。 詳細については、「プロジェクト設定 (変換)」を参照してください。
Access のテーブルに、レプリケーション列がある。 レプリケーション システム列を含む Access テーブルを SQL Server に移行すると、移行後に Jet レプリケーション機能が壊れます。

移行後は、SQL Server レプリケーションを使用してデータベースの同期コピーを維持することを検討してください。
一意なインデックスを持つ Access テーブルに、複数の null 値が含まれている。 8.13 より前のバージョンでは、一意なインデックスを持つ Access テーブルに複数の null 値が含まれている場合、SQL Server に転送することはできません。SQL Server では、一意なインデックスでは複数の null 値が許可されていないためです。 これらのテーブルの移行は失敗します。

SSMA では、評価レポートでこの問題が指摘されます。 評価レポートを作成するには、「変換のためのアクセス データベース オブジェクトの評価」を参照してください。

この問題がある場合は、主キーに重複する null 値がないことを確認する必要があります。 または、複数の null 値を含む主キーまたは一意なインデックスを削除する必要があります。
Access のテーブルに、SQL Server では範囲外の日付値が含まれている。 SQL Server の datetime 型は、1753 年 1 月 1 日から 9999 年 12 月 31 日の範囲の日付のみを受け入れます。 Access では、100年 1 月 1 日から 9999 年 12 月 31 日の範囲の日付が受け入れられます。

SSMA では、評価レポートでこの問題が指摘されます。 評価レポートを作成するには、「変換のためのアクセス データベース オブジェクトの評価」を参照してください。

SSMA で SQL Server の範囲外の日付を解決する方法を構成することができます。 詳細については、「プロジェクト設定 (移行)」を参照してください。
Access のインデックスの長さが 900 バイトを超える。 SQL Server インデックスには、インデックス キー列の合計サイズに対して 900 バイトの制限があります。 Access テーブルで大きなインデックスが使用されている場合、SSMA に警告が表示されます。

データ移行を続行すると、移行が失敗する可能性があります。
Access オブジェクト名が SQL Server キーワードである、または特殊文字が含まれている。 Access と SQL Server では、予約キーワードと特殊文字のセットが異なります。 SQL Server では、SQL Server キーワードを使用して名前が付けられたオブジェクト、または括弧や引用符で囲まれた識別子 ("select" や [select].p など) を使用する場合は特殊文字を含むオブジェクトが受け入れられます。 詳細については、SQL Server オンライン ブックの「区切られた識別子 (データベース エンジン)」をご覧ください。

注: 引用符を使用して識別子を区切る場合は、SET QUOTED_IDENTIFIER をオンにする必要があります。

たとえば CREATE TABLE [schema](c1 [FOR]) は、スキーマFOR が予約キーワードであっても、有効なステートメントです。 また CREATE TABLE [xxx*yyy](c1 x&y) は、テーブルと列名に特殊文字 *& が含まれている場合でも、有効なステートメントです。

また、これらのオブジェクトを参照するすべてのクエリでは、括弧または引用符で囲まれた名前を使用する必要があります。 たとえば、クエリ SELECT * FROM schema は失敗します。 正しいクエリは SELECT * FROM [schema] となります。

Access データベース オブジェクトを変換すると、[出力] ウィンドウにキーワードまたは特殊文字を使用するすべての Access テーブルが一覧表示されます。 Access でテーブルを修正し、データベースを削除してもう一度追加してください。または、これらのオブジェクトを参照するクエリを括弧または引用符を使用して識別子を区切るように修正してください。 クエリを修正しないと、Access アプリケーションからエラーが返されたり、他の問題が発生したりする可能性があります。
フィールドのサイズが、主キーと外部キーのリレーションシップで異なる。 SQL Server では、異なるデータ型またはサイズの列を外部キー制約でリンクする Jet 機能はサポートされていません。

Access データベース オブジェクトを変換すると、[出力] ウィンドウに、SQL Server に変換されない主キー/外部キー制約が一覧表示されます。 Access 列のデータ型とサイズを一致するように変更し、Access データベースを削除してから再追加してください。 または、SQL Server ではこれらの制約は作成されませんが、データを移行することもできます。
Access リレーションシップの参照先テーブルに、主キーも一意なインデックスもない。 Access では、参照先テーブルに主キーまたは一意なインデックスがないテーブル間のリレーションシップが受け入れられます。 ただし、これは SQL Server ではサポートされていません。

Access データベース オブジェクトを変換すると、[出力] ウィンドウに、リレーションシップを持っていて、主キーまたは一意なインデックスがないテーブルが一覧表示されます。 テーブルを変更して主キーまたは一意なインデックスを追加し、Access データベースを削除してから、再追加してください。 または、テーブル間のリレーションシップは切断されますが、データを移行することもできます。
アクセス テーブルにハイパーリンク列がある。 SQL Server では、ハイパーリンク列はサポートされていません。 代わりに、列は Access のメモ列のように扱われます。 既定では、これらの列は SQL Server の nvarchar(max) 列に変換されます。 マッピングをカスタマイズすることができます。 詳細については、「ソースとターゲットのデータ型のマッピング」を参照してください。
既定または入力規則の式に、SQL Server または SQL Azure に変換できない Access 関数が含まれている。 アクセスの既定の式または入力規則には、SQL Server または SQL Azure にマップされない Access システム関数またはユーザー定義関数が含まれる場合があります。 SQL Server または SQL Azure にマップされない関数を使用すると、既定の式または入力規則を SQL Server または SQL Azure に読み込むことができなくなります。

参照

Access データベースの移行の準備
SQL Server への Access データベースの移行