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

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

Note

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

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

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

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

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

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

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

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

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

Note

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

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

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

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

  • データ ファイルの各フィールドは、インポート先テーブルの対応する列と互換性がある必要があります。 その例として、 int フィールドを datetime 列に読み込むことはできません。 詳細については、「一括インポートまたは一括エクスポートのデータ形式 (SQL Server)」および「bcp 使用時に互換性のあるデータ形式を指定する (SQL Server)」を参照してください。

    Note

    ファイル全体をインポートするのではなく、データ ファイルからインポートする行のサブセットを指定するには、bcp コマンドを -F <first_row> スイッチおよび/または -L <last_row> スイッチとともに使用することができます。 詳細については、「 bcp Utility」を参照してください。

  • 固定長フィールドまたは固定幅フィールドを含むデータ ファイルからデータをインポートするには、フォーマット ファイルを使用します。 詳細については、「XML フォーマット ファイル (SQL Server)」を参照してください。

  • SQL Server 2017 (14.x)とその以降では、SQL Server にデータを一括インポートするためのデータ ファイルとして CSV ファイルを使用することができます。 CSV ファイルのフィールド ターミネータは必ずしもコンマである必要はないです。 一括インポートのデータ ファイルとして利用できるようにするには、CSV ファイルが次の条件を満たしている必要があります。

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

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

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

      32 ビット システム (SQL Server 2014 (12.x)とその以前のバージョン) では、OPENROWSET を Jet 用 OLE DB Provider と共に使用して、一括インポートの最適化なしで CSV データを SQL Server テーブルにインポートできます。 Jet は、データ ソースと同じディレクトリ内にある schema.ini ファイルで定義されたスキーマを使用して、テキスト ファイルをテーブルとして扱います。 CSV データの場合、schema.ini ファイル内のパラメーターの 1 つは"FORMAT=CSVDelimited"となります。 この解決方法を使用するには、Jet Text IISAM の操作方法 (その接続文字列の構文、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 権限が必要です。

Note

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