一括エクスポートまたは一括インポートのデータの準備
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics 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
パーティション ビューへのデータの一括インポートはサポートされません。パーティション ビューにデータを一括インポートするとエラーになります。