一括エクスポートまたは一括インポートのデータの準備

ここでは、一括エクスポート操作の計画に関する考慮事項と一括インポート操作の要件について説明します。

注意

一括インポート用にデータ ファイルの書式を設定する方法が不明確な場合は、bcp ユーティリティを使用して、データをテーブルからデータ ファイルにエクスポートできます。このファイル内の各データ フィールドの書式設定では、データを対応するテーブル列に一括インポートする際に必要な書式設定が示されています。データ ファイルのフィールドに同じデータの書式設定を使用してください。

一括エクスポートのデータ ファイル形式に関する注意点

bcp コマンドを使用して一括エクスポート操作を実行する前に、次のことを考慮してください。

  • データをファイルにエクスポートする際、bcp コマンドにより、指定したファイル名のデータ ファイルが自動的に作成されます。指定の名前が既に使用されている場合、そのファイルの既存のコンテンツは、そのデータ ファイルに一括コピーするデータで上書きされます。

  • テーブルまたはビューからデータを一括エクスポートする場合、一括コピーするテーブルまたはビューに SELECT 権限が必要になります。

  • Microsoft SQL Server では、データの取得に並列スキャンを使用できます。そのため、SQL Server インスタンスから一括エクスポートされるテーブル行は、通常、エクスポート先のデータ ファイルで特定の順序で表示されるとは保証されません。一括エクスポートされたテーブル行がデータ ファイル内に特定の順序で表示されるようにするには、queryout オプションを使用してクエリから一括エクスポートを行い、ORDER BY 句を指定します。詳細については、「クエリからデータ ファイルへのデータのエクスポート」を参照してください。

一括インポートのデータ ファイル形式の要件

データ ファイルからデータをインポートするには、データ ファイルは以下の基本要件を満たしている必要があります。

  • データは、行と列の形式になっている必要があります。
注意

一括インポート処理では、列がスキップされたり順番が再変更されることがあるため、データ ファイルの構造は、SQL Server テーブルの構造と同一である必要はありません。

  • データ ファイルのデータは、文字列形式やネイティブ形式など、サポートされている形式である必要があります。

  • データは、Unicode を含む文字列形式またはネイティブ バイナリ形式にすることができます。

  • bcp コマンド、BULK INSERT ステートメント、または INSERT ...SELECT * FROM OPENROWSET(BULK...) ステートメントを使用してデータをインポートするには、インポート先のテーブルが既に存在している必要があります。

  • データ ファイルの各フィールドは、インポート先テーブルの対応する列と互換性がある必要があります。たとえば、int フィールドを datetime 列に読み込むことはできません。詳細については、「ネイティブ形式、文字形式、または Unicode 形式の使用」および「bcp を使用した互換性のためのデータ形式の指定」を参照してください。

    注意

    ファイル全体をインポートするのではなく、データ ファイルからインポートする行のサブセットを指定するには、bcp コマンドと -F first_row スイッチまたは -L last_row スイッチ、あるいは両方のスイッチを組み合わせて使用します。詳細については、「bcp ユーティリティ」を参照してください。

  • 固定長フィールドまたは固定幅フィールドを含むデータ ファイルからデータをインポートするには、フォーマット ファイルを使用する必要があります。詳細については、「XML フォーマット ファイルについて」および「XML フォーマット ファイルのサンプル」を参照してください。

  • SQL Server の一括インポート操作では、コンマ区切り (CSV) ファイルがサポートされていません。ただし、場合によっては、SQL Server に対してデータを一括インポートする際、CSV ファイルをデータ ファイルとして使用できます。CSV ファイルのフィールド ターミネータは必ずしもコンマである必要はありません。一括インポートのデータ ファイルとして利用できるようにするには、CSV ファイルが次の条件を満たしている必要があります。

    • データ フィールドにフィールド ターミネータが含まれていないこと。

    • データ フィールドの値を囲む引用符 ("") の有無がすべての値で統一されていること。

    データを Microsoft FoxPro や Visual FoxPro テーブル (.dbf) ファイル、または Microsoft Excel ワークシート (.xls) ファイルから一括インポートするには、前述の制限に準拠した CSV ファイルにデータを変換する必要があります。通常、ファイル拡張子は .csv です。そうすると、SQL Server 一括インポート操作で .csv ファイルをデータ ファイルとして使用できます。

    32 ビット システムでは、OPENROWSETOLE DB Provider for Jet と共に使用することにより、一括インポートの最適化を使用せずに CSV データを SQL Server テーブルにインポートできます。Jet は、データ ソースと同じディレクトリ内にある schema.ini ファイルで定義されたスキーマを使用して、テキスト ファイルをテーブルとして扱います。CSV データの場合、schema.ini ファイル内のパラメーターの 1 つが "FORMAT=CSVDelimited" となります。この解決方法を使用するには、Jet Test IISAMm 操作、その接続文字列の構文、schema.ini の使用法、レジストリ設定オプションなどについて理解する必要があります。この情報については、Microsoft Access ヘルプとサポート技術情報 (KB) の資料を参照することをお勧めします。詳細については、「テキスト データ ソース ドライバーを初期化する」、「HOWTO: セキュリティ設定された Access データベースへのリンク サーバーを指定した SQL Server 7.0 分散クエリ」、「Jet OLE DB プロバイダー 4.0 を使用して ISAM データベースに接続する方法」、および「Jet プロバイダーの Text IIsam を使用して区切り記号付きテキスト ファイルを開く方法」を参照してください。

また、データ ファイルのデータをテーブルに一括インポートするには、以下の要件も満たしている必要があります。

  • ユーザーは、インポート先のテーブルに対する INSERT 権限および SELECT 権限を持っている必要があります。また、制約を無効にするなどデータ定義言語 (DDL) 操作が必要なオプションを使用する場合は、ALTER TABLE 権限も必要になります。

  • BULK INSERT または INSERT ...SELECT * FROM OPENROWSET(BULK...) を使用してデータを一括インポートする際は、SQL Server プロセスのセキュリティ プロファイル (ユーザーが SQL Server で提供されたログインを使用してログインしている場合) またはデリゲートされたセキュリティに基づいて使用されている Microsoft Windows ログインから、このデータ ファイルにアクセスし、読み取り操作ができる状態でなければなりません。また、ファイルを読み取るには、ユーザーに ADMINISTER BULK OPERATIONS 権限が必要です。

注意

パーティション ビューへのデータの一括インポートはサポートされません。パーティション ビューにデータを一括インポートするとエラーになります。