データの一括インポートに関する基本的なガイドライン

データ ファイルのみからデータを一括インポートするには、bcp コマンド、BULK INSERT ステートメント、または OPENROWSET(BULK) 関数を使用します。

注意

テキスト ファイル以外のオブジェクトからデータを一括インポートするカスタム アプリケーションを記述することもできます。メモリ バッファからデータを一括インポートするには、SQL Server Native Client (ODBC) アプリケーション プログラミング インターフェイス (API) または OLE DB IRowsetFastLoad インターフェイスのいずれかの bcp 拡張機能を使用します。C# のデータ テーブルからデータを一括インポートするには、ADO.NET 一括コピー API (SqlBulkCopy) を使用します。

注意

リモート テーブルへのデータの一括インポートはサポートされていません。

データ ファイルから Microsoft SQL Server インスタンスにデータを一括インポートするときは、次のガイドラインに従ってください。

  • 使用しているユーザー アカウントに必要な権限を取得する。

    bcp ユーティリティ、BULK INSERT ステートメント、INSERT ... SELECT * FROM OPENROWSET(BULK...) ステートメントのいずれかで使用するユーザー アカウントには、テーブル操作に必要な権限がテーブルの所有者によって割り当てられている必要があります。各方法に必要な権限の詳細については、「bcp ユーティリティ」、「OPENROWSET (Transact-SQL)」、および「BULK INSERT (Transact-SQL)」を参照してください。

  • 一括ログ復旧モデルを使用する。

    このガイドラインは、完全復旧モデルを使用するデータベースに関するものです。一括ログ復旧モデルは、インデックスなしテーブル (ヒープ) に対して一括操作を実行する場合に便利です。一括ログ復旧では行の挿入がログに記録されないため、一括ログ復旧モデルを使用することで、トランザクション ログの領域が不足する状況を回避できます。一括ログ復旧モデルの詳細については、「一括ログ復旧モデルでのバックアップ」を参照してください。

    一括インポート操作の直前に一括ログ復旧モデルが使用されるようにデータベースを変更することをお勧めします。一括インポート操作が終了したらすぐに、データベースを完全復旧モデルに戻します。詳細については、「完全復旧モデルまたは一括ログ復旧モデルからの切り替え」を参照してください。

    注意

    一括インポート操作時のログ記録を最小限にする方法の詳細については、「一括インポートで最小ログ記録を行うための前提条件」を参照してください。

  • データの一括インポート後にバックアップを行う。

    単純復旧モデルを使用するデータベースの場合は、一括インポート操作後に完全バックアップまたは差分バックアップを行うことをお勧めします。詳細については、「SQL Server データベースの完全バックアップおよび差分バックアップの作成」を参照してください。

    一括ログ復旧モデルまたは完全復旧モデルの場合、ログ バックアップで十分です。詳細については、「トランザクション ログ バックアップの作成」を参照してください。

  • 大量一括インポートのパフォーマンスを向上するために、テーブル インデックスを削除する。

    このガイドラインは、テーブル内の既存のデータ量に比べて大量のデータをインポートするときに関するものです。この場合、一括インポート操作を実行する前にテーブルからインデックスを削除すると、パフォーマンスが大幅に向上します。

    注意

    テーブル内の既存のデータ量に比べて少量のデータを読み込む場合は、インデックスを削除すると逆効果です。インデックスの再構築に必要な時間が、一括インポート操作で節約される時間よりも長くなることがあります。

    詳細については、「一括インポートのパフォーマンスの最適化」を参照してください。

  • データ ファイルにある隠し文字を検索して取り除く。

    多くのユーティリティやテキスト エディタで隠し文字を表示できます。隠し文字は、通常データ ファイルの末尾にあります。一括インポート操作のとき、ASCII データ ファイルに隠し文字があると、"予期しない NULL が見つかりました" というエラーが発生することがあります。隠し文字をすべて検索して削除することにより、この問題を回避することができます。