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

適用対象:yesSQL Server (サポートされているすべてのバージョン) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

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

注意

データ ファイルを一括インポート用に書式設定する方法がわからない場合は、 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 列に読み込むことはできません。 詳細については、「一括インポートまたは一括エクスポートのデータ形式 (SQL Server)」および「bcp を使用する場合の互換性のためのデータ形式の指定 (SQL Server)」を参照してください。

    注意

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

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

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

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

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

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

    32 ビット システム (SQL Server 2014 以下) では、OPENROWSET と OLE DB Provider for Jet を使用することで、最適化を一括インポートせずに CSV データをSQL Server テーブルにインポートできます。 Jet は、データ ソースと同じディレクトリ内にある schema.ini ファイルで定義されたスキーマを使用して、テキスト ファイルをテーブルとして扱います。 CSV データの場合、schema.ini ファイル内のパラメーターの 1 つが "FORMAT=CSVDelimited" となります。 このソリューションを使用するには、Jet Text IISAM の動作方法 (接続文字列構文、schema.ini使用法、レジストリ設定オプションなど) を理解する必要があります。この情報の最適なソースは、Microsoft Access のヘルプとサポート技術情報 (KB) の記事です。 詳細については、「Initializing the Text Data Source Driver」 (テキスト データ ソースのドライバーを初期化する)、「How To Use a SQL Server 7.0 Distributed Query with a Linked Server to Secured Access Databases」 (セキュリティ設定された Access データベースにリンクされたサーバーで SQL Server 7.0 分散クエリを使用する方法)、「HOW TO:Use Jet OLE DB Provider 4.0 to Connect to ISAM Databases」 (ISAM データベースへの接続に Jet OLE DB プロバイダー 4.0 を使用する方法)、「How To Open Delimited Text Files Using the Jet Provider's Text IIsam」 (Jet プロバイダーの Text IIsam を使用して区切り記号付きテキスト ファイルを開く方法) を参照してください。

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

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

  • BULK INSERT または INSERT ..を使用してデータを一括インポートする場合。SELECT * FROM OPENROWSET(BULK...)、データ ファイルは、SQL Server プロセスのセキュリティ プロファイル (ユーザーが指定されたログインを使用してログインした場合) または委任されたセキュリティの下で使用される Microsoft SQL Server Windows ログインによって、読み取り操作にアクセスできる必要があります。 また、ファイルを読み取るには、ユーザーに ADMINISTER BULK OPERATIONS 権限が必要です。

注意

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

外部リソース

[HOWTO] DTS: Excel から SQL Server にデータをインポートする方法

変更履歴

変更内容
OLE DB Provider for Jet を使用した CSV データのインポートについての情報を追加しました。

参照

bcp ユーティリティ
BULK INSERT (Transact-SQL)
データ型 (Transact-SQL)
文字形式を使用したデータのインポートまたはエクスポート (SQL Server)
ネイティブ形式を使用してデータをインポートまたはエクスポートする (SQL Server)