bcp ユーティリティ

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

トピック リンク アイコン bcp 構文に使用される構文表記規則については、「Transact-SQL 構文表記規則 (Transact-SQL)」を参照してください。

注意

bcp を使用してデータをバックアップする場合、フォーマット ファイルを作成してデータ形式を記録します。bcp データ ファイルには、スキーマ情報やフォーマット情報が含まれないので、テーブルまたはビューが削除され、フォーマット ファイルがない場合は、データをインポートできないことがあります。

構文

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

引数

  • database_name
    指定したテーブルまたはビューを含むデータベースの名前を指定します。指定しない場合は、ユーザーの既定データベースになります。

    -d で明示的にデータベース名を指定することもできます。

  • owner
    テーブルまたはビューの所有者の名前を指定します。操作を実行するユーザーが指定のテーブルまたはビューを所有している場合、owner は省略可能です。owner が指定されず、操作を実行するユーザーが指定のテーブルまたはビューを所有していない場合は、SQL Server からエラー メッセージが返され、操作は取り消されます。

  • 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 も指定します。

    ストアド プロシージャ内で参照されるテーブルのすべてが bcp ステートメントの実行前に存在する場合に限り、クエリはストアド プロシージャを参照できます。たとえば、ストアド プロシージャにより一時テーブルが生成される場合、この一時テーブルは実行時にだけ利用でき、ステートメントの実行時には利用できないため、bcp ステートメントは失敗します。このような場合、ストアド プロシージャの結果をテーブルに挿入し、bcp を使用してテーブルからデータ ファイルにデータをコピーすることを検討してください。

  • in | out| queryout | format
    次に示すように、一括コピーの方向を指定します。

    • in はファイルからデータベース テーブルまたはビューへのコピーを行います。

    • out はデータベース テーブルまたはビューからファイルへのコピーを行います。既存のファイルを指定すると、ファイルは上書きされます。bcp ユーティリティは、データを抽出するときに、空文字列を NULL 文字列に、NULL 文字列を空文字列で表すことに注意してください。

    • queryout はクエリからのコピーを行います。データをクエリから一括コピーする場合にのみ指定する必要があります。

    • format は、指定されたオプション (-n-c-w、または -N)、およびテーブルやビューの区切り記号に基づいてフォーマット ファイルを作成します。データを一括コピーするとき、bcp コマンドはフォーマット ファイルを参照することができるため、フォーマット情報を対話的に再入力する必要がなくなります。format オプションには -f オプションが必要です。XML フォーマット ファイルを作成する場合には、-x オプションも必要です。詳細については、「フォーマット ファイルの作成」を参照してください。

  • data_file
    データ ファイルの完全パスを指定します。SQL Server にデータを一括インポートする場合は、データ ファイルには指定したテーブルまたはビューにコピーするデータが含まれます。SQL Server からデータを一括エクスポートする場合は、データ ファイルにはテーブルまたはビューからコピーしたデータが含まれます。パスは、1 文字から 255 文字までです。データ ファイルに含めることができる行の数は最大 263 - 1 です。

    重要な注意事項重要

    format オプションを使用する場合、data_file (formatnul) の値として nul を指定する必要があります。

  • -mmax_errors
    bcp 操作を取り消す前に発生することのできる構文エラーの最大数を指定します。構文エラーは、対象となるデータ型へのデータの変換エラーを意味しています。max_errors の合計では、制約違反など、サーバーでのみ検出することができるエラーはすべて対象外となります。

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

    注意

    -m オプションも、money データ型あるいは bigint データ型の変換には適用されません。

  • -fformat_file
    フォーマット ファイルの完全パスを指定します。このオプションの意味は、オプションが使用されている環境によって次のように異なります。

    • -fformat オプションと共に使用される場合は、指定されたテーブルまたはビューに対して、指定された format_file が作成されます。XML フォーマット ファイルを作成するには、-x オプションも指定します。詳細については、「フォーマット ファイルの作成」を参照してください。

    • in または out オプションと共に使用される場合は、-f には既存のフォーマット ファイルが必要です。

      注意

      in オプションまたは out オプションでは、フォーマット ファイルは省略可能です。-f オプションを省略すると、-n-c-w、または -N を指定しなかった場合に、コマンドによってフォーマット情報が要求され、それに対する応答がフォーマット ファイルに保存されます (既定のファイル名は Bcp.fmt)。

    format_file がハイフン (-) またはスラッシュ (/) で始まる場合は、-f と format_file の名前の間に空白を入れないでください。

  • -x
    format オプションおよび -fformat_file オプションと共に使用すると、XML ベースのフォーマット ファイルが生成されます。このオプションを指定しないと、既定で XML 以外のフォーマット ファイルが生成されます。-x はデータのインポート時やエクスポート時には機能しません。format および -fformat_file の両方を指定せずに使用すると、エラーが生成されます。

    注意

    -x スイッチを使用するには、bcp 10.0 クライアントを使用している必要があります。bcp 10.0 クライアントの使用方法の詳細については、後の「解説」を参照してください。

  • -eerr_file
    bcp ユーティリティがファイルからデータベースに転送できなかった行を格納するエラー ファイルの完全パスを指定します。bcp コマンドからのエラー メッセージは、ユーザーのワークステーションに送られます。このオプションを指定しないと、エラー ファイルは作成されません。

    err_file がハイフン (-) またはスラッシュ (/) で始まる場合は、-e と err_file の名前の間に空白を入れないでください。

  • -Ffirst_row
    テーブルからエクスポートする最初の行、またはデータ ファイルからインポートする最初の行の番号を指定します。このパラメーターには、0 より大きく (> 0)、行の合計数以下 (< または =) となる値が必要です。このパラメーターがない場合、既定ではファイルの最初の行となります。

    first_row には、2^63-1 以下の正の整数を指定できます。-Ffirst_row は 1 から始まります。

  • -Llast_row
    テーブルからエクスポートする最後の行、またはデータ ファイルからインポートする最後の行の番号を指定します。このパラメーターには、0 より大きく (> 0)、最後の行の番号以下 (< または =) となる値が必要です。このパラメーターがない場合、既定ではファイルの最後の行となります。

    last_row には、2^63-1 以下の正の整数を指定できます。

  • -bbatch_size
    一括インポートするデータの行数を指定します。コミットされる前に、各バッチはすべてのバッチをインポートする個別のトランザクションとしてインポートおよび記録されます。既定では、データ ファイルのすべての行が 1 つのバッチとしてインポートされます。複数のバッチに行を分散するには、データ ファイルの行数よりも少ない batch_size を指定します。バッチのトランザクションが失敗すると、現在のバッチの挿入のみがロールバックされます。コミットされたトランザクションによって既にインポートされているバッチは、それ以降の失敗による影響を受けません。

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

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

  • -ddatabase_name
    接続先のデータベースを指定します。既定では、bcp.exe はユーザーの既定のデータベースに接続します。

    -ddatabase_name を、bcp.exe の最初のパラメーターとして渡される三部構成の名前 (database_name.schema.table) と一緒に指定すると、エラーが発生します。これは、データベース名を 2 回指定することはできないからです。

    database_name がハイフン (-) またはスラッシュ (/) で始まる場合は、-d とデータベース名の間に空白を入れないでください。

  • -n
    データのネイティブ (データベース) データ型を使用して一括コピー操作を実行します。このオプションを使用すると、フィールドごとにプロンプトが表示されません。ネイティブ値が使用されます。

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

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

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

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

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

    SQL Server 2005 SP1 以降では、データをエクスポートしてから -N を付けて bcp.exe を実行して同じテーブル スキーマにインポートした場合、固定長で Unicode 以外の文字の列 (char(10) など) があると、切り捨ての警告が表示されることがあります。

    この警告は、無視してもかまいません。この警告を解決するには、-N ではなく -n を使用する方法があります。

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

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

  • -V (70 | 80 | 90 )
    以前のバージョンの SQL Server のデータ型を使用して一括コピー操作を実行します。このオプションを使用すると、フィールドごとにプロンプトが表示されません。既定値が使用されます。

    70 = SQL Server 7.0

    80 = SQL Server 2000

    90 = SQL Server 2005

    たとえば、SQL Server 7.0 でサポートされておらず、それ以降のバージョンの SQL Server で導入された型 (bigint、sql_variant、xml など) のデータを生成する場合、-V70 オプションを使用します。

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

  • -q
    bcp ユーティリティと SQL Server のインスタンスとの接続で、SET QUOTED_IDENTIFIERS ON ステートメントを実行します。名前に空白や単一引用符が含まれるデータベース、所有者、テーブル、またはビューを指定する場合に、このオプションを使用します。3 つの要素から成るテーブル名またはビュー名全体を、二重引用符 (" ") で囲みます。

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

    -q は、-d に渡される値には適用されません。

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

  • -C { ACP | OEM | RAW | code_page }
    データ ファイルにあるデータのコード ページを指定します。文字コードが 127 を超えるかまたは 32 未満である文字を含む char、varchar、または text 列がデータに含まれる場合にのみ code_page は関係します。

    注意

    フォーマット ファイルの各列に対して照合順序名を指定することをお勧めします。

    コード ページ値

    説明

    ACP

    ANSI/Microsoft Windows (ISO 1252) です。

    OEM

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

    RAW

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

    code_page

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

    重要な注意事項重要
    SQL Server はコード ページ 65001 (UTF-8 エンコード) をサポートしません。

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

  • -tfield_term
    フィールド ターミネータを指定します。既定値は、\t (タブ文字) です。既定のフィールド ターミネータを無効にする場合、このパラメーターを使用します。詳細については、「フィールド ターミネータと行ターミネータの指定」を参照してください。

    bcp.exe コマンドでは、フィールド ターミネータを 16 進数表記で指定すると、値が 0x00 で切り捨てられます。たとえば、0x410041 を指定した場合、使用されるのは 0x41 になります。

    field_term がハイフン (-) またはスラッシュ (/) で始まる場合は、-t と field_term の値の間に空白を入れないでください。

  • -rrow_term
    行ターミネータを指定します。既定値は、\n (改行文字) です。既定の行ターミネータを無効にする場合、このパラメーターを使用します。詳細については、「フィールド ターミネータと行ターミネータの指定」を参照してください。

    bcp.exe コマンドでは、行ターミネータを 16 進数表記で指定すると、値が 0x00 で切り捨てられます。たとえば、0x410041 を指定した場合、使用されるのは 0x41 になります。

    row_term がハイフン (-) またはスラッシュ (/) で始まる場合は、-r と row_term の値の間に空白を入れないでください。

  • -iinput_file
    応答ファイルの名前を指定します。応答ファイルには、対話モード (-n-c-w、または -N が指定されていないモード) で一括コピーを実行する場合の、各データ フィールドに関するコマンド プロンプトの質問への応答が含まれます。

    input_file がハイフン (-) またはスラッシュ (/) で始まる場合は、-i と input_file の名前の間に空白を入れないでください。

  • -ooutput_file
    コマンド プロンプトからリダイレクトされた出力を受け取るファイル名を指定します。

    output_file がハイフン (-) またはスラッシュ (/) で始まる場合は、-o と output_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 の名前付きインスタンスに接続するには、server_name
    \**instance_name を指定します。

  • -Ulogin_id
    SQL Server への接続に使用されるログイン ID を指定します。

    セキュリティに関する注意セキュリティに関する注意

    bcp ユーティリティが、統合セキュリティを使用した信頼関係接続で SQL Server に接続している場合、user name および password の組み合わせではなく、-T オプション (信頼関係接続) を使用します。

  • -Ppassword
    ログイン ID のパスワードを指定します。このオプションを指定しない場合、bcp コマンドによってパスワードが要求されます。また、このオプションをコマンド プロンプトの最後にパスワードなしで使用すると、bcp では既定のパスワード (NULL) が使用されます。

    セキュリティに関する注意セキュリティに関する注意

    空白のパスワードは使用しないでください。強力なパスワードを使用してください。

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

    password がハイフン (-) またはスラッシュ (/) で始まる場合は、-P と password の間に空白を入れないでください。

  • -T
    bcp ユーティリティが統合セキュリティを使用した信頼関係接続を使用して SQL Server に接続することを指定します。ネットワーク ユーザーのセキュリティ資格情報、login_id、および password は必要ありません。-T を指定しない場合、正常にログインするには -U-P を指定する必要があります。

  • -v
    bcp ユーティリティ バージョン番号と著作権に関する情報を報告します。

  • -R
    通貨、日付、時刻のデータを SQL Server に一括コピーする場合に、クライアント コンピューターのロケール設定に定義された地域別設定が使用されます。既定の設定では、地域別設定は無視されます。

  • -k
    一括コピー操作時、空の列には、挿入される列の既定値ではなく、NULL 値が保持されます。詳細については、「一括インポート中の NULL の保持または既定値の使用」を参照してください。

  • -E
    ID 列には、インポートされたデータ ファイル内の ID 値が使用されます。-E を指定しない場合、インポートされるデータ ファイルの ID 列の値は無視され、SQL Server はテーブルの作成時に指定されたシードと増分の値に基づいて一意の値を自動的に割り当てます。

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

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

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

  • **-h"**hint[ ,...n] "
    データをテーブルまたはビューに一括インポートするときに使用するヒントを指定します。

    • 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 制約は無視され、操作の後でテーブルの制約は信頼されていないものとしてマークされます。

      注意

      UNIQUE、PRIMARY KEY、および NOT NULL 制約は常に適用されます。

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

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

      注意

      bcp によってデータ検証とデータ チェックが実行されるようになったため、スクリプトがデータ ファイル内にある無効なデータに対して実行された場合、このスクリプトは失敗する可能性があります。

      注意

      -m max_errors スイッチは、制約チェックには適用されません。

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

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

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

説明

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

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

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

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

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

ネイティブ データ ファイルのサポート

SQL Server 2008 R2 の bcp ユーティリティでは、SQL Server 2000、SQL Server 2005、SQL Server 2008、およびSQL Server 2008 R2 のみと互換性のあるネイティブ データ ファイルがサポートされています。

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

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

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

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

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

  • コマンド プロンプトで空白や引用符を含む識別子またはファイル名を指定する場合、識別子を二重引用符 (" ") で囲みます。

    たとえば、次の bcp out コマンドでは、Currency Types.dat という名前のデータ ファイルが作成されます。

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

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

    • -q オプションを指定します。

    • 所有者名、テーブル名、またはビュー名を、引用符内でかっこ ([ ]) を使用して囲みます。

データの検証

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 ヒントを指定しません。

    注意

    制約の無効化は既定の動作です。制約を明示的に有効にするには、CHECK_CONSTRAINTS ヒントと共に -h オプションを使用します。

  • トリガーが存在するため、FIRE_TRIGGER ヒントを指定しません。

    注意

    既定では、トリガーは起動しません。トリガーを明示的に起動するには、FIRE_TRIGGERS ヒントと共に -h オプションを使用します。

  • ID 値をデータ ファイルからインポートするには、-E オプションを使用します。

注意

SQL Server 2005 からは、対象テーブルでの ALTER TABLE 権限が必要となりました。この新しい要件により、対象テーブルでの ALTER TABLE 権限がユーザー アカウントに与えられていないと、トリガーおよび制約チェックを実行しない bcp スクリプトは失敗する可能性があります。

キャラクター モード (-c) およびネイティブ モード (-n) のベスト プラクティス

ここでは、キャラクター モード (-c) およびネイティブ モード (-n) に関する推奨事項を示します。

  • (管理者/ユーザー) 可能であれば、区切り記号の問題を回避するためにネイティブ形式 (-n) を使用します。SQL Server を使用してエクスポートおよびインポートを行う場合は、ネイティブ形式を使用します。データを SQL Server 以外のデータベースにインポートする場合は、-c オプションまたは -w オプションを使用して SQL Server からデータをエクスポートします。

  • (管理者) BCP OUT を使用するときは、データを検証します。たとえば、BCP OUT、BCP IN、BCP OUT の順に使用する場合は、データが正しくエクスポートされ、ターミネータ値がデータ値の一部として使用されていないことを検証します。ターミネータ値とデータ値の競合を回避するには、(-t オプションおよび -r オプションを使用して) 既定のターミネータをランダムな 16 進数値に置き換えることを検討してください。

  • (ユーザー) 実際の文字列値と競合する可能性を最小限に抑えるには、一意の長いターミネータ (バイトまたは文字の任意のシーケンス) を使用します。これは、-t オプションおよび -r オプションを使用して行います。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

USE AdventureWorks2008R2;
GO
SELECT * FROM Sales.Currency2;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

bcp AdventureWorks2008R2.Sales.Currency format nul -T -c -x -f Currency.xml
注意

-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 AdventureWorks2008R2.Sales.Currency2 in Currency.dat -T -f Currency.xml
注意

フォーマット ファイルは、データ ファイルのフィールドとテーブル列の数、順序、データ型などが異なる場合に役立ちます。詳細については、「データのインポートまたはエクスポート用のフォーマット ファイル」を参照してください。

その他の例

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

関連項目

参照

概念

その他の技術情報