bcp ユーティリティ

更新 : 2006 年 12 月 12 日

bcp ユーティリティは、ユーザー指定の形式に基づいて、Microsoft SQL Server 2005 インスタンスとデータ ファイルとの間でデータの一括コピーを行います。bcp ユーティリティを使用すると、多数の新規行を SQL Server テーブルにインポートしたり、データをテーブルからデータ ファイルにエクスポートすることができます。このユーティリティでは Transact-SQL の知識は必要ありません。ただし、queryout オプションと同時に使用する場合は、Transact-SQL の知識が必要になります。データをテーブルにインポートするには、そのテーブル用に作成されたフォーマット ファイルを使用するか、テーブルの構造およびテーブルの列に有効なデータの型を理解しておく必要があります。

トピック リンク アイコン bcp の構文規則の詳細については、「コマンド プロンプト ユーティリティ」を参照してください。

構文

bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
    {in | out | queryout | format} data_file
    [-mmax_errors] [-fformat_file] [-x] [-eerr_file]
    [-Ffirst_row] [-Llast_row] [-bbatch_size]
    [-n] [-c] [-N] [-w] [-V (60 | 65 | 70 | 80)] [-6] 
    [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term] 
    [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
    [-Sserver_name[\instance_name]] [-Ulogin_id] [-Ppassword]
    [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]

引数

  • database_name
    指定したテーブルまたはビューを含むデータベースの名前を指定します。指定しない場合は、ユーザーの既定データベースになります。
  • owner
    テーブルまたはビューの所有者の名前を指定します。操作を実行するユーザーが指定のテーブルまたはビューを所有している場合、owner は省略可能です。owner が指定されず、操作を実行するユーザーが指定のテーブルまたはビューを所有していない場合は、SQL Server 2005 からエラー メッセージが返され、操作は取り消されます。
  • table_name
    データを SQL Server にインポートする (in オプション) 場合はインポート先のテーブルの名前、データを SQL Server からエクスポートする (out オプション) 場合はエクスポート元のテーブルの名前を指定します。
  • view_name
    データを SQL Server にコピーする (in オプション) 場合はコピー先のビューの名前、データを SQL Server からコピーする (out オプション) 場合はコピー元のビューの名前を指定します。すべての列が同じテーブルを参照しているビューのみが、コピー先のビューとして使用できます。データをビューにコピーするときの制限の詳細については、「INSERT (Transact-SQL)」を参照してください。
  • "query"
    結果セットを返す単一の Transact-SQL クエリです。SELECT ステートメントで COMPUTE 句を指定した場合のように、クエリが複数の結果セットを返す場合、最初の結果セットだけがデータ ファイルにコピーされます。以降の結果セットはコピーされません。クエリ全体を二重引用符で囲んでください。クエリ内に組み込まれるものは、単一引用符で囲みます。クエリからデータを一括コピーする場合には、queryout も指定します。
  • in | out | queryout | format
    次に示すように、一括コピーの方向を指定します。

    • in はファイルからデータベース テーブルまたはビューへのコピーを行います。
      ms162802.note(ja-jp,SQL.90).gifメモ :
      SQL Server 6.5 の bcp ユーティリティの場合、sql_variant 型または bigint 型のデータを含むテーブルへの一括コピーはサポートされません。
    • out はデータベース テーブルまたはビューからファイルへのコピーを行います。bcp ユーティリティは、データを抽出するときに、空文字列を NULL 文字列に、NULL 文字列を空文字列で表すことに注意してください。
    • queryout はクエリからのコピーを行います。データをクエリから一括コピーする場合にのみ指定する必要があります。
    • format は、指定されたオプション (-n-c-w-6、または -N)、およびテーブルやビューの区切り記号に基づいてフォーマット ファイルを作成します。データを一括コピーするとき、bcp コマンドはフォーマット ファイルを参照することができるため、フォーマット情報を対話的に再入力する必要がなくなります。format オプションには -f オプションが必要です。XML フォーマット ファイルを作成する場合には、-x オプションも必要です。詳細については、「フォーマット ファイルの作成」を参照してください。
  • data_file
    データ ファイルの完全パスを指定します。SQL Server にデータを一括インポートする場合は、データ ファイルには指定したテーブルまたはビューにコピーするデータが含まれます。SQL Server からデータを一括エクスポートする場合は、データ ファイルにはテーブルまたはビューからコピーしたデータが含まれます。パスは、1 文字から 255 文字までです。データ ファイルに含めることができる行の数は最大 2,147,483,647 です。

    ms162802.note(ja-jp,SQL.90).gif重要 :
    format オプションを使用する場合、data_file (formatnul) の値として nul を指定する必要があります。
  • -mmax_errors
    bcp 操作を取り消す前に発生することのできる構文エラーの最大数を指定します。構文エラーは、対象となるデータ型へのデータの変換エラーを意味しています。max_errors の合計では、制約違反など、サーバーでのみ検出することができるエラーはすべて対象外となります。

    bcp ユーティリティでコピーできない行は無視され、エラーとしてカウントされます。このオプションが指定されない場合の既定値は 10 になります。

    ms162802.note(ja-jp,SQL.90).gifメモ :
    -m オプションも、money データ型あるいは bigint データ型の変換には適用されません。
  • -fformat_file
    フォーマット ファイルの完全パスを指定します。このオプションの意味は、オプションが使用されている環境によって次のように異なります。

    • -fformat オプションと共に使用される場合は、指定されたテーブルまたはビューに対して、指定された format_file が作成されます。XML フォーマット ファイルを作成するには、-x オプションも指定します。詳細については、「フォーマット ファイルの作成」を参照してください。
    • in または out オプションと共に使用される場合は、-f には既存のフォーマット ファイルが必要です。
      ms162802.note(ja-jp,SQL.90).gifメモ :
      in オプションまたは out オプションでは、フォーマット ファイルは省略可能です。-f オプションを省略すると、-n-c-w-6、または -N を指定しなかった場合に、コマンド プロンプトによってフォーマット情報が要求され、それに対する応答がフォーマット ファイルに保存されます (既定のファイル名は Bcp.fmt)。
  • -x
    format オプションおよび -fformat_file オプションと共に使用すると、XML ベースのフォーマット ファイルが生成されます。このオプションを指定しないと、既定で XML 以外のフォーマット ファイルが生成されます。-x はデータのインポート時やエクスポート時には機能しません。format および -fformat_file の両方を指定せずに使用すると、エラーが生成されます。

    ms162802.note(ja-jp,SQL.90).gifメモ :
    -x スイッチを使用するには、bcp 9.0 クライアントを使用する必要があります。bcp 9.0 クライアントの使用方法の詳細については、後の「解説」を参照してください。
  • -eerr_file
    bcp ユーティリティがファイルからデータベースに転送できなかった行を格納するエラー ファイルの完全パスを指定します。bcp コマンドからのエラーメッセージは、ユーザーのワークステーションに送られます。このオプションを指定しないと、エラー ファイルは作成されません。
  • -Ffirst_row
    テーブルからエクスポートする最初の行、またはデータ ファイルからインポートする最初の行の番号を指定します。このパラメータには、0 より大きく (> 0)、行の合計数以下 (< または =) となる値が必要です。このパラメータがない場合、既定ではファイルの最初の行となります。
  • -Llast_row
    テーブルからエクスポートする最後の行、またはデータ ファイルからインポートする最後の行の番号を指定します。このパラメータには、0 より大きく (> 0)、最後の行の番号以下 (< または =) となる値が必要です。このパラメータがない場合、既定ではファイルの最後の行となります。
  • -bbatch_size
    一括インポートするデータの行数を指定します。コミットされる前に、各バッチはすべてのバッチをインポートする個別のトランザクションとしてインポートおよび記録されます。既定では、データ ファイルのすべての行が 1 つのバッチとしてインポートされます。複数のバッチに行を分散するには、データ ファイルの行数よりも少ない batch_size を指定します。バッチのトランザクションが失敗すると、現在のバッチの挿入のみがロールバックされます。コミットされたトランザクションによって既にインポートされているバッチは、それ以降の失敗による影響を受けません。

    このオプションは、**h"**ROWS_PER_BATCH =bb" オプションと組み合わせて使用しないでください。

    詳細については、「一括インポートのバッチの管理」を参照してください。

  • -c
    文字データ型を使用して操作を実行します。このオプションを使用すると、フィールドごとにプロンプトが表示されません。char をプレフィクスなしのストレージ型として、また \t (タブ) をフィールド区切り文字、\r\n (改行文字) を行ターミネータとして使用します。

    詳細については、「文字形式を使用したデータのインポートまたはエクスポート」を参照してください。

  • -N
    文字以外のデータについてはデータベースのネイティブなデータ型を使用し、文字データについては Unicode 文字を使用して、一括コピー操作を実行します。-w オプションの代わりにこのオプションを使用すると、高いパフォーマンスが得られます。このオプションは、データ ファイルを使用して SQL Server のインスタンスから別のインスタンスにデータを転送する場合に使用します。フィールドごとにプロンプトは表示されません。パフォーマンスの高いネイティブ モードを利用して ANSI の拡張文字を含むデータを転送する場合は、このオプションを使用します。-N は SQL Server 6.5 またはそれ以前のバージョンでは使用できません。

    詳細については、「Unicode ネイティブ形式を使用したデータのインポートまたはエクスポート」を参照してください。

  • -w
    Unicode 文字を使用して一括コピー操作を実行します。このオプションを使用すると、フィールドごとにプロンプトが表示されません。ストレージ型 nchar、プレフィクスなし、フィールド区切り文字 \t (タブ)、行ターミネータ \n (改行文字) が使用されます。このオプションは SQL Server 6.5 またはそれ以前のバージョンでは使用できません。

    詳細については、「Unicode 文字形式を使用したデータのインポートまたはエクスポート」を参照してください。

  • -V ( 60| 65| 70| 80)
    以前のバージョンの SQL Server のデータ型を使用して一括コピー操作を実行します。このオプションを使用すると、フィールドごとにプロンプトが表示されません。既定値が使用されます。たとえば、ODBC ではサポートされなくなったが、SQL Server 6.5 の bcp ユーティリティでサポートされている日付形式を SQL Server 2005 に一括コピーするには、-V65 パラメータを使用します。

    ms162802.note(ja-jp,SQL.90).gif重要 :
    データを SQL Server からデータ ファイルに一括エクスポートする場合、-V が指定されていても、bcp ユーティリティでは、SQL Server 6.0 または SQL Server 6.5 の datetime 型 (日付時刻型) や smalldatetime 型 (短精度日付時刻型) の日付形式は生成されません。日付は常に ODBC の形式で書き込まれます。さらに、SQL Server 6.5 およびそれ以前のバージョンでは NULL 値を許可する bit データがサポートされていないので、bit の列には NULL 値の代わりに 0 値が書き込まれます。

    詳細については、「以前のバージョンの SQL Server からのネイティブ形式データおよび文字形式データのインポート」を参照してください。

  • -6
    SQL Server 6.0 または SQL Server 6.5 のデータ型を使用して一括コピー操作を実行します。このオプションは、以前のバージョンとの互換性を保つためにのみサポートされています。SQL Server 7 およびそれ以降の場合は、代わりに -V オプションを使用してください。
  • -q
    bcp ユーティリティと SQL Server のインスタンスとの接続で、SET QUOTED_IDENTIFIERS ON ステートメントを実行します。名前に空白や単一引用符が含まれるデータベース、所有者、テーブル、またはビューを指定する場合に、このオプションを使用します。3 つの要素から成るテーブル名またはビュー名全体を、二重引用符 (" ") で囲みます。

    空白や単一引用符を含むデータベース名を指定するには、–q オプションを使用する必要があります。

    詳細については、後の「解説」を参照してください。

  • -C { ACP | OEM | RAW | code_page }
    以前のバージョンの SQL Server との互換性を保つためにサポートされています。SQL Server 7.0 以降の場合、Microsoft では、フォーマット ファイルの各列に対して照合順序名を指定することをお勧めします。

    データ ファイルにあるデータのコード ページを指定します。文字コードが 127 を超えるかまたは 32 未満である文字を含む charvarchar、または text 列がデータに含まれる場合にのみ code_page は関係します。

    コード ページ値 説明

    ACP

    ANSI/Microsoft Windows (ISO 1252) 用です。

    OEM

    クライアントが使用する既定のコード ページです。-C が指定されていない場合に使用される既定のコード ページです。

    RAW

    コード ページの変換は行われません。したがって、これは最も速いオプションです。

    code_page

    850 などの特定のコード ページ番号を指定します。

    詳細については、「異なる照合順序間でのデータのコピー」を参照してください。

  • -tfield_term
    フィールド ターミネータを指定します。既定値は、\t (タブ文字) です。既定のフィールド ターミネータを無効にする場合、このパラメータを使用します。詳細については、「フィールド ターミネータと行ターミネータの指定」を参照してください。
  • -iinput_file
    応答ファイルの名前を指定します。応答ファイルには、対話モード (-n-c-w-6、または -N が指定されていないモード) で一括コピーを実行する場合の、各データ フィールドに関するコマンド プロンプトの質問への応答が含まれます。
  • -ooutput_file
    コマンド プロンプトからリダイレクトされた出力を受け取るファイル名を指定します。
  • -apacket_size
    サーバーとの間で送信されるネットワーク パケットごとのバイト数を指定します。サーバー構成オプションは、SQL Server Management Studio または sp_configure システム ストアド プロシージャを使用して設定できます。ただし、このオプションを使用すれば、サーバー構成オプションを個別に無効にできます。packet_size の有効値は 4,096 ~ 65,535 バイトです。既定値は 4,096 です。

    パケット サイズを大きくすると、一括コピーのパフォーマンスを向上させることができます。より大きなサイズのパケットを要求しても、許可されない場合、既定値が使用されます。bcp ユーティリティが作成するパフォーマンス統計は、使用したパケット サイズを示します。

  • -Sserver_name[ **\instance_name]
    接続先となる SQL Server のインスタンスを指定します。サーバーを指定しない場合、bcp ユーティリティは、ローカル コンピュータ上の SQL Server の既定のインスタンスに接続されます。ネットワーク上のリモート コンピュータまたはローカルの名前付きインスタンスから bcp コマンドを実行するときは、このオプションが必要です。サーバー上にある SQL Server の既定のインスタンスに接続するには、server_name のみを指定します。SQL Server 2005 の名前付きインスタンスに接続するには、server_name
    \**instance_name を指定します。
  • -Ulogin_id
    SQL Server への接続に使用されるログイン ID を指定します。

    ms162802.security(ja-jp,SQL.90).gifセキュリティ メモ :
    bcp ユーティリティが、統合セキュリティを使用した信頼関係接続で SQL Server に接続している場合、user name および password の組み合わせではなく、-T オプション (信頼関係接続) を使用します。
  • -Ppassword
    ログイン ID のパスワードを指定します。このオプションを指定しない場合、bcp コマンドによってパスワードが要求されます。また、このオプションをコマンド プロンプトの最後にパスワードなしで使用すると、bcp では既定のパスワード (NULL) が使用されます。

    ms162802.security(ja-jp,SQL.90).gifセキュリティ メモ :
    空白のパスワードは使用しないでください。強力なパスワードを使用してください。

    パスワードをマスクする場合は、-P オプションを -U オプションと共には指定しないでください。bcp-U オプションおよび他のスイッチと共に指定した後 (-P は指定しない)、Enter キーを押すと、このコマンドによってパスワードが要求されます。この方法を使用すると、入力時にパスワードが確実にマスクされます。

  • -T
    bcp ユーティリティは、統合セキュリティを使用した信頼関係接続で SQL Server に接続します。ネットワーク ユーザーのセキュリティ資格情報、login_id、および password は必要ありません。–T を指定しない場合、正常にログオンするには –U–P を指定する必要があります。
  • -v
    bcp ユーティリティ バージョン番号と著作権に関する情報を報告します。
  • -R
    通貨、日付、時刻のデータを SQL Server に一括コピーする場合に、クライアント コンピュータのロケール設定に定義された地域別設定が使用されます。既定の設定では、地域別設定は無視されます。
  • -E
    ID 列には、インポートされたデータ ファイル内の ID 値が使用されます。-E を指定しない場合、インポートされるデータ ファイルの ID 列の値は無視され、SQL Server 2005 はテーブルの作成時に指定されたシードと増分の値に基づいて一意の値を自動的に割り当てます。

    データ ファイルにテーブルまたはビュー内の ID 列の値が含まれない場合は、フォーマット ファイルを使用して、データのインポート時にテーブルまたはビュー内の ID 列を無視するように指定します。SQL Server 2005 では、一意な値が自動的にこの列に割り当てられます。詳細については、「DBCC CHECKIDENT (Transact-SQL)」を参照してください。

    -E オプションには、特別な権限が必要です。詳細については、後の「解説」を参照してください。

    詳細については、「データの一括インポート時の ID 値の保持」に記載されている、ID 値の保持に関する説明を参照してください。

  • **-h"**hint[ ,... n] "
    データをテーブルまたはビューに一括インポートするときに使用するヒントを指定します。SQL Server 6.x またはそれ以前のバージョンにデータを一括コピーする場合は、このオプションは使用できません。

    • ORDER**(column[ASC | DESC] [,...n])**
      データ ファイルのデータの並べ替え順序です。インポートするデータをテーブル上のクラスタ化インデックス (存在する場合) に従って並べ替えると、一括インポートのパフォーマンスが向上します。データ ファイルが異なる順序で並べ替えられている場合、つまり、クラスタ化インデックス キーの順序以外で並べ替えられている場合、またはテーブルにクラスタ化インデックスが存在しない場合、ORDER 句は無視されます。指定する列の名前は、インポート先のテーブル内で有効な列であることが必要です。既定では、bcp はデータ ファイルの並べ替えが行われていないことを前提としています。最適化された一括インポートでは、SQL Server でも、インポートされるデータが並べ替えられていることが検証されます。

      詳細については、「データの一括インポート時の並べ替え順の制御」を参照してください。

    • ROWS_PER_BATCH =bb
      各バッチあたりのデータ行数 (bb) です。
      -b
      を指定しない場合に使用します。データ ファイル全体が 1 つのトランザクションとしてサーバーに送られます。サーバーは、bb の値に応じて一括読み込みを最適化します。ROWS_PER_BATCH の既定値はありません。

      詳細については、「一括インポートのバッチの管理」を参照してください。

    • KILOBYTES_PER_BATCH = cc
      バッチごとのデータの概算キロバイト数 (KB) です (cc)。KILOBYTES_PER_BATCH の既定値はありません。

      詳細については、「一括インポートのバッチの管理」を参照してください。

    • TABLOCK
      一括読み込み操作中に一括更新のテーブルレベルのロックが適用されます。これを指定しない場合、行レベルのロックが適用されます。一括コピー操作時だけロックすることにより、テーブル ロックの競合が少なくなるので、このヒントはパフォーマンスを大幅に向上させます。テーブルにインデックスがなく、TABLOCK が指定されている場合、複数のクライアントが同時に 1 つのテーブルを読み込むことができます。既定では、ロック動作はテーブル オプション table lock on bulk load によって決定されます。

      詳細については、「一括インポートのロック動作の制御」を参照してください。

    • CHECK_CONSTRAINTS
      一括インポート操作中、対象テーブルまたはビューに対するすべての制約を検証します。CHECK_CONSTRAINTS ヒントを指定しない場合、CHECK 制約および FOREIGN KEY 制約は無視され、操作の後でテーブルの制約は信頼されていないものとしてマークされます。

      ms162802.note(ja-jp,SQL.90).gifメモ :
      UNIQUE、PRIMARY KEY、および NOT NULL 制約は常に適用されます。

      テーブル全体の制約は、任意の時点で必ず検証してください。一括インポート操作の前にテーブルが空でなかった場合、制約を再検証するコストは、増分データに CHECK 制約を適用するコストを超える場合があります。したがって、通常は、増分一括インポート時の制約チェックを有効にすることをお勧めします。

      入力データに制約違反の行が含まれている場合などは、制約を無効 (既定の動作) にできます。CHECK 制約を無効にした場合、データをインポートした後で、Transact-SQL ステートメントを使用して無効なデータを削除できます。

      ms162802.note(ja-jp,SQL.90).gifメモ :
      SQL Server 2005 では、bcp によって新しいデータ検証とデータ チェックが実行されます。これにより、既存のスクリプトがデータ ファイル内にある無効なデータに対して実行された場合、このスクリプトは失敗する可能性があります。
      ms162802.note(ja-jp,SQL.90).gifメモ :
      -mmax_errors スイッチは、制約チェックには適用されません。

      詳細については、「一括インポート操作による制約チェックの制御」を参照してください。

    • FIRE_TRIGGERS
      in 引数と共に指定されている場合、一括コピーの操作時に、コピー先のテーブル上で定義されている挿入トリガを実行します。FIRE_TRIGGERS が指定されていない場合は、挿入トリガは実行されません。FIRE_TRIGGERS は、out 引数、queryout 引数、および format 引数では無視されます。

      詳細については、「データの一括インポート時のトリガ実行の制御」を参照してください。

解説

bcp 9.0 クライアントは、Microsoft SQL Server をシステムにインストールしたときにインストールされます。SQL Server 2005 と SQL Server 2000 の両方のツールがインストールされている場合は、PATH 環境変数の値によっては、bcp 9.0 クライアントではなく、旧版の bcp クライアントが使用される可能性があります。この環境変数は Windows が実行可能ファイルを探すときに使用するディレクトリのセットを定義します。使用しているバージョンを確認するには、Windows のコマンド プロンプトから「bcp/v」コマンドを実行します。コマンドパスを PATH 環境変数で設定する方法の詳細については、Windows のヘルプを参照してください。

XML フォーマット ファイルは、SQL Server ツールが SQL Native Client と共にインストールされている場合のみサポートされます。

bcp ユーティリティを実行する場所や方法、およびコマンド プロンプト ユーティリティの構文規則については、「コマンド プロンプト ユーティリティ」を参照してください。

一括インポート操作または一括エクスポート操作のデータの準備については、「一括エクスポートまたは一括インポートのデータの準備」を参照してください。

一括インポート中に実行される行挿入操作がトランザクション ログに記録されるタイミングの詳細については、「一括インポートで最小ログ記録を行うための前提条件」を参照してください。

計算列とタイムスタンプ列

計算列または timestamp 型列にインポートされるデータ ファイル内の値は無視され、SQL Server 2005 によって自動的に値が割り当てられます。データ ファイルにテーブル内の計算列または timestamp 型列の値が含まれない場合は、フォーマット ファイルを使用して、データのインポート時にテーブル内の計算列または timestamp 型列を無視するように指定します。SQL Server では、この列に値が自動的に割り当てられます。

計算列と timestamp 型列は、通常どおり、SQL Server からデータ ファイルに一括コピーされます。

空白や引用符を含む識別子の指定

SQL Server 識別子には、空白を挿入したり、引用符などの文字を含めることができます。これらの識別子は次のように扱う必要があります。

  • コマンド プロンプトで空白や引用符を含む識別子またはファイル名を指定する場合、識別子を二重引用符 (" ") で囲みます。
    たとえば、次の bcp out コマンドでは、Currency Types.dat という名前のデータ ファイルが作成されます。

    bcp AdventureWorks.Sales.Currency out "Currency Types.dat" -T -c
    
  • 空白や引用符を含むデータベース名を指定するには、q オプションを使用する必要があります。

  • 空白文字や引用符を含んでいる所有者、テーブル、またはビューの名前については、次のうちのいずれかを行うことができます。

    • -q オプションを指定します。
    • 所有者名、テーブル名、またはビュー名を、引用符内でかっこ ([ ]) を使用して囲みます。

データの検証

SQL Server 2005 では、bcp によって新しいデータ検証とデータ チェックが実行されます。これにより、既存のスクリプトがデータ ファイル内にある無効なデータに対して実行された場合、このスクリプトは失敗する可能性があります。たとえば、bcp では新たに次の検証が行われます。

  • float 型と real 型のネイティブ表記が有効かどうか。
  • Unicode データが偶数バイト長かどうか。

以前のリリースでは、クライアントが無効なデータにアクセスを試みるまでは失敗が発生することはありませんでしたが、以前のバージョンの SQL Server で一括インポート可能であった無効な形式のデータが、新しいバージョンでは読み込みに失敗する場合があります。今回のリリースでは検証機能が追加されたため、一括読み込み後のクエリで発生する問題を最小限に抑えられます。

SQLXML ドキュメントの一括エクスポートまたは一括インポート

SQLXML データを一括エクスポートまたは一括インポートする場合、フォーマット ファイルのデータ型には次のいずれかを使用します。

データ型 結果

SQLCHAR または SQLVARYCHAR

データは、クライアント コード ページまたは照合順序で暗黙的に指定されるコード ページで送られます。結果は、フォーマット ファイルを指定せずに、-c スイッチを指定した場合と同じです。

SQLNCHAR または SQLNVARCHAR

データは Unicode として送られます。結果は、フォーマット ファイルを指定せずに、-w スイッチを指定した場合と同じです。

SQLBINARY または SQLVARYBIN

データは変換なしで送られます。

権限

bcp out 操作には、ソース テーブルでの SELECT 権限が必要です。

bcp in 操作には、対象となるテーブルでの SELECT/INSERT 権限が最低限必要となります。また、次のうちのいずれかに該当する場合は、ALTER TABLE 権限が必要です。

  • 制約が存在するため、CHECK_CONSTRAINTS ヒントを指定しません。
    ms162802.note(ja-jp,SQL.90).gifメモ :
    制約の無効化は既定の動作です。制約を明示的に有効にするには、CHECK_CONSTRAINTS ヒントと共に -h オプションを使用します。
  • トリガが存在するため、FIRE_TRIGGER ヒントを指定しません。
    ms162802.note(ja-jp,SQL.90).gifメモ :
    既定では、トリガは起動しません。トリガを明示的に起動するには、FIRE_TRIGGERS ヒントと共に -h オプションを使用します。
  • ID 値をデータ ファイルからインポートするには、-E オプションを使用します。
ms162802.note(ja-jp,SQL.90).gifメモ :
SQL Server 2005 からは、対象テーブルでの ALTER TABLE 権限が必要となりました。この新しい要件により、対象テーブルでの ALTER TABLE 権限がユーザー アカウントに与えられていないと、トリガおよび制約チェックを実行しない bcp スクリプトは失敗する可能性があります。

ここでは、次の例について説明します。

  • A. データ ファイルへのテーブル行のコピー (信頼関係接続を使用)
  • B. データ ファイルへのテーブル行のコピー (混合モード認証を使用)
  • C. ファイルからテーブルへのデータのコピー
  • D. データ ファイルへの特定の列のコピー
  • E. データ ファイルへの特定の行のコピー
  • F. クエリからデータ ファイルへのデータのコピー
  • G. XML 以外のフォーマット ファイルの作成
  • H. XML フォーマット ファイルの作成
  • I. フォーマット ファイルを使用した bcp での一括インポート

A. データ ファイルへのテーブル行のコピー (信頼関係接続を使用)

次の例では、AdventureWorks.Sales.Currency テーブルに対して out オプションを実行します。Currency.dat という名前のデータ ファイルを作成し、文字形式を使用してテーブルのデータをこのデータ ファイルにコピーします。この例では、Windows 認証を使用していること、および bcp コマンドを実行しているサーバー インスタンスへの信頼関係接続が与えられていることを前提としています。

コマンド プロンプトで、次のコマンドを入力します。

bcp AdventureWorks.Sales.Currency out Currency.dat -T -c

B. データ ファイルへのテーブル行のコピー (混合モード認証を使用)

次の例では、AdventureWorks.Sales.Currency テーブルに対して out オプションを実行します。Currency.dat という名前のデータ ファイルを作成し、文字形式を使用してテーブルのデータをこのデータ ファイルにコピーします。

この例では、混合モード認証を使用していることを前提としているため、ログイン ID の指定に -U スイッチを使用する必要があります。また、ローカル コンピュータ上にある SQL Server の既定のインスタンスに接続していない場合は、-S スイッチを使用して、システム名およびインスタンス名 (省略可) を指定します。

bcp AdventureWorks.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>

システムによってパスワードの入力が求められます。

C. ファイルからテーブルへのデータのコピー

次の例では、上の例で作成されたファイル (Currency.dat) を使用して、in オプションを実行します。ただし、最初に AdventureWorks Sales.Currency テーブルの空のコピー、Sales.Currency2 が作成され、これにデータがコピーされます。この例では、Windows 認証を使用していること、および bcp コマンドを実行しているサーバー インスタンスへの信頼関係接続が与えられていることを前提としています。

空のテーブルを作成するには、クエリ エディタで次のコマンドを入力します。

USE AdventureWorks;
GO
SELECT * INTO AdventureWorks.Sales.Currency2 
FROM AdventureWorks.Sales.Currency WHERE 1=2

文字データを新規のテーブルに一括コピーする、つまりデータをインポートするには、コマンド プロンプトで次のコマンドを入力します。

bcp AdventureWorks.Sales.Currency2 in Currency.dat -T -c

コマンドが正常終了したことを確認するには、クエリ エディタでテーブルの内容を表示し、次を入力します。

USE AdventureWorks;
GO
SELECT * FROM Sales.Currency2

D. データ ファイルへの特定の列のコピー

特定の列をコピーする場合に、queryout オプションを使用できます。次の例では、Sales.Currency テーブルの Name 列のみをデータ ファイルにコピーします。この例では、Windows 認証を使用していること、および bcp コマンドを実行しているサーバー インスタンスへの信頼関係接続が与えられていることを前提としています。

Windows のコマンド プロンプトで、次のように入力します。

bcp "SELECT Name FROM AdventureWorks.Sales.Currency" queryout Currency.Name.dat -T -c

E. データ ファイルへの特定の行のコピー

特定の行をコピーする場合に、queryout オプションを使用できます。次の例では、Jarrod Rana という名前の連絡先の行のみを AdventureWorks.Person.Contact テーブルからデータ ファイル (Jarrod Rana.dat) へコピーします。この例では、Windows 認証を使用していること、および bcp コマンドを実行しているサーバー インスタンスへの信頼関係接続が与えられていることを前提としています。

Windows のコマンド プロンプトで、次のように入力します。

bcp "SELECT * FROM AdventureWorks.Person.Contact WHERE FirstName='Jarrod' AND LastName='Rana' "  queryout "Jarrod Rana.dat" -T -c

F. クエリからデータ ファイルへのデータのコピー

Transact-SQL ステートメントからデータ ファイルに結果セットをコピーするには、queryout オプションを使用します。次の例では、名前 (姓、名の順) を AdventureWorks.Person.Contact テーブルから、Contacts.txt データ ファイルへコピーします。この例では、Windows 認証を使用していること、および bcp コマンドを実行しているサーバー インスタンスへの信頼関係接続が与えられていることを前提としています。

Windows のコマンド プロンプトで、次のように入力します。

bcp "SELECT FirstName, LastName FROM AdventureWorks.Person.Contact ORDER BY LastName, Firstname" queryout Contacts.txt -c -T

G. XML 以外のフォーマット ファイルの作成

次の例では、AdventureWorks データベース内の Sales.Currency テーブルに対して、Currency.fmt という名前の XML 以外のフォーマット ファイルを作成します。この例では、Windows 認証を使用していること、および bcp コマンドを実行しているサーバー インスタンスへの信頼関係接続が与えられていることを前提としています。

Windows のコマンド プロンプトで、次のように入力します。

bcp AdventureWorks.Sales.Currency format nul -T -c  -f Currency.fmt

詳細については、「XML 以外のフォーマット ファイルについて」を参照してください。

H. XML フォーマット ファイルの作成

次の例では、AdventureWorks データベース内の Sales.Currency テーブルに対して Currency.xml という名前の XML フォーマット ファイルを作成します。この例では、Windows 認証を使用していること、および bcp コマンドを実行しているサーバー インスタンスへの信頼関係接続が与えられていることを前提としています。

Windows のコマンド プロンプトで、次のように入力します。

bcp AdventureWorks.Sales.Currency format nul -T -c -x -f Currency.xml
ms162802.note(ja-jp,SQL.90).gifメモ :
-x スイッチを使用するには、bcp 9.0 クライアントを使用する必要があります。bcp 9.0 クライアントの使用方法の詳細については、「解説」を参照してください。

詳細については、「XML フォーマット ファイルについて」を参照してください。

I. フォーマット ファイルを使用した bcp での一括インポート

SQL Server のインスタンスへデータをインポートするときに、既に作成してあるフォーマット ファイルを使用するには、-f スイッチを in オプションと共に使用します。たとえば、次のコマンドは、作成済みのフォーマット ファイル (Currency.xml) を使用して、データ ファイル (Currency.dat) の内容を Sales.Currency テーブルのコピー (Sales.Currency2) に一括コピーします。この例では、Windows 認証を使用していること、および bcp コマンドを実行しているサーバー インスタンスへの信頼関係接続が与えられていることを前提としています。

Windows のコマンド プロンプトで、次のように入力します。

bcp AdventureWorks.Sales.Currency2 in Currency.dat -T -f Currency.xml
ms162802.note(ja-jp,SQL.90).gifメモ :
フォーマット ファイルは、データ ファイルの各フィールド (番号、順番、データ型など) がテーブル列とは異なる場合に利用できます。詳細については、「データのインポートまたはエクスポート用のフォーマット ファイル」を参照してください。

その他の例

次のトピックに bcp を使用した例があります。

参照

その他の技術情報

一括エクスポートまたは一括インポートのデータの準備
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
テーブルレベル ロックと並行したデータのインポート
SET QUOTED_IDENTIFIER (Transact-SQL)
sp_configure (Transact-SQL)
sp_tableoption (Transact-SQL)
データをインポートまたはエクスポートするためのデータ形式
データのインポートまたはエクスポート用のフォーマット ファイル
一括インポートのパフォーマンスの最適化
一括インポート操作と一括エクスポート操作について
データの一括インポートとエクスポートのシナリオ

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

変更内容 :
  • CHECK_CONSTRAINTS の説明を、このヒントにより CHECK 制約と FOREIGN KEY 制約の両方が無視されるという記載に修正。

2006 年 7 月 17 日

新しい内容 :
  • ORDER 引数の説明を更新。
  • 「その他の例」を追記し、bcp の例が記載されているトピックへのリンクを提示。

2006 年 4 月 14 日

変更内容 :
  • 常に適用される制約の一覧から FOREIGN KEY を削除し、CHECK_CONSTRAINTS の説明にある注意を更新。
  • ALTER TABLE 権限の要件を更新。