適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric SQL Database
一括コピー プログラムユーティリティ (bcp) は、Microsoft SQL Server のインスタンスと、ユーザー指定の形式のデータ ファイルとの間でデータの一括コピーを行います。
Linux で bcp を使用する場合は、「 Linux に sqlcmd および bcp SQL Server コマンド ライン ツールをインストールする」を参照してください。 bcp を Azure Synapse Analytics で使用する方法の詳細については、bcp でのデータの読み込みに関する記事を参照してください。
bcp ユーティリティを使うと、多数の新規行を SQL Server テーブルにインポートしたり、データをテーブルからデータ ファイルにエクスポートしたりできます。 このユーティリティでは Transact-SQL の知識は必要ありません。ただし、queryout
オプションと同時に使う場合はその知識が必要になります。 テーブルにデータをインポートするには、そのテーブル用に作成されたフォーマット ファイルを使用するか、テーブルの構造とその列に対して有効なデータの型を理解する必要があります。
注意
bcp を使ってデータをバックアップする場合、フォーマット ファイルを作成してデータ形式を記録します。 bcp データ ファイルには、スキーマやフォーマットの情報が含まれないので、テーブルまたはビューが削除され、フォーマット ファイルがない場合は、データをインポートできないことがあります。
bcp 構文で使う構文表記規則については、「Transact-SQL 構文表記規則」を参照してください。
Linux および macOS での bcp については、 Linux および macOS での bcp に関する考慮事項を参照してください。
最新バージョンの bcp ユーティリティをダウンロードする
コマンドライン ツールは一般提供 (GA) ですが、SQL Server 2019 (15.x) 以降のインストーラー パッケージと共にリリースされています。
ODBC Driver for SQL Server のダウンロード
Microsoft Command Line Utilities 15 for SQL Server (x64) をダウンロードする
Microsoft Command Line Utilities 15 for SQL Server (x86) をダウンロードする
バージョン情報
- リリース番号: 15.0.4298.1
- ビルド番号: 15.0.4298.1
- リリース日: 2023 年 4 月 7 日
bcp では、Azure SQL Database、Microsoft Fabric の SQL データベース、Azure Synapse Analytics の多要素認証 (MFA) のサポートなど、Microsoft Entra 認証がサポートされます。
注意
Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。
システム要件
- Windows 8、Windows 8.1、Windows 10、Windows 11
- Windows Server 2016、Windows Server 2019、Windows Server 2022
このコンポーネントには、最新の Microsoft ODBC Driver 17 for SQL Server が必要です。
BCPのバージョンを調べるには、bcp -v
コマンドを実行して、15.0.4298.1 以降が使われていることを確認します。
TDS 8.0 のサポート
SQL Server 2025 (17.x) プレビューでは、 bcp ユーティリティの TDS 8.0 サポートが導入されています。
構文
bcp [database_name.] schema.{table_name | view_name | "query"}
{in data_file | out data_file | queryout data_file | format nul}
[-a packet_size]
[-b batch_size]
[-c]
[-C { ACP | OEM | RAW | code_page } ]
[-d database_name]
[-D]
[-e err_file]
[-E]
[-f format_file]
[-F first_row]
[-G Microsoft Entra authentication]
[-h"hint [,...n]"]
[-i input_file]
[-k]
[-K application_intent]
[-l login_timeout]
[-L last_row]
[-m max_errors]
[-n]
[-N]
[-o output_file]
[-P password]
[-q]
[-r row_term]
[-R]
[-S [server_name[\instance_name]]]
[-t field_term]
[-T]
[-U login_id]
[-u]
[-v]
[-V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 | 170)]
[-w]
[-x]
[-Y[s|m|o]]
考慮事項と制限事項
- bcp ユーティリティには、エラー メッセージには 512 バイトの文字しか表示されないという制限があります。 エラー メッセージの最初の 512 バイトのみが表示されます。
Linux および macOS での bcp に関する考慮事項
フィールド ターミネータはタブ (
\t
) です。行末文字は改行 (
\n
) です。文字モードは、 bcp フォーマット ファイルと、拡張文字を含まないデータ ファイルに推奨される形式です。
コマンドライン引数のバックスラッシュ (
\
) は、引用符で囲むかエスケープする必要があります。 たとえば、ユーザー設定の行ターミネータとして改行を指定する場合、次のいずれかのメカニズムを使用する必要があります。-r\\n
-r"\n"
-r'\n'
コマンド ライン オプション
次の表に、 bcp で使用できるコマンド ライン オプションと、それらがサポートするオペレーティング システムを示します。
コマンド ライン オプション | Windows でサポートされています | Linux および macOS でサポートされています |
---|---|---|
[database_name.]スキーマ。{table_name | view_name | "query"} | イエス | イエス |
{indata_file | outdata_file | queryoutdata_file | format nul} | イエス | イエス |
-a packet_size | イエス | イエス |
-b batch_size | イエス | イエス |
-c | イエス | イエス |
-C { ACP |OEM |RAW | code_page } | イエス | いいえ |
-d database_name | イエス | イエス |
-D | イエス | イエス |
-e err_file | イエス | イエス |
-E | イエス | イエス |
-f format_file | イエス | イエス |
-F 最初の行 | イエス | イエス |
-G Microsoft Entra 認証 | イエス | イエス |
-h"hint [,...n]" | イエス | いいえ |
-i input_file | イエス | いいえ |
-k | イエス | イエス |
-K application_intent | イエス | イエス |
-l login_timeout | イエス | イエス |
-L last_row | イエス | イエス |
-m max_errors | イエス | イエス |
-n | イエス | イエス |
-N | イエス | いいえ |
-o output_file | イエス | いいえ |
-P パスワード | イエス | イエス |
-q | イエス | イエス |
-r row_term | イエス | イエス |
-R | イエス | イエス |
-S [server_name[\instance_name]] | イエス | イエス |
-t フィールド用語 | イエス | イエス |
-T | イエス | イエス |
-U login_id | イエス | イエス |
-u | はい 1 | イエス |
-v | イエス | イエス |
-V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 | 170 ) | イエス | いいえ |
-w | イエス | イエス |
-x | イエス | いいえ |
-Y[s|m|o] | はい 1 | イエス |
はい1 SQL Server 2025 (17.x) プレビュー以降のバージョン。
database_name
指定したテーブルまたはビューが存在するデータベースの名前。 指定しない場合は、ユーザーの既定データベースになります。
-d
で明示的にデータベース名を指定することもできます。
スキーマ
テーブルまたはビューの所有者の名前。 操作を実行するユーザーが指定のテーブルまたはビューを所有している場合、schema は省略可能です。 スキーマが指定されておらず、操作を実行しているユーザーが指定したテーブルまたはビューを所有していない場合、SQL Server はエラー メッセージを返し、操作は取り消されます。
table_name
データを SQL Server にインポートする (in
) 場合はインポート先のテーブルの名前、データを SQL Server からエクスポートする (out
) 場合はエクスポート元のテーブルの名前。
view_name
データを SQL Server にコピーする (in
) 場合はコピー先のビューの名前、データを SQL Server からコピーする (out
) 場合はコピー元のビューの名前。 すべての列が同じテーブルを参照しているビューのみが、コピー先のビューとして使用できます。 ビューにデータをコピーする際の制限についての詳細は、「INSERT」を参照してください。
"query"
結果セットを返す Transact-SQL クエリ。 クエリから複数の結果セットが返される場合、最初の結果セットのみがデータ ファイルにコピーされ、それ以降の結果セットは無視されます。 クエリは二重引用符で、クエリに埋め込まれたものは単一引用符で囲みます。
queryout
クエリからデータを一括コピーする場合には、 も指定します。
ストアド プロシージャ内で参照されるテーブルのすべてが bcp ステートメントの実行前に存在する場合に限り、クエリはストアド プロシージャを参照できます。 たとえば、ストアド プロシージャにより一時テーブルが生成される場合、この一時テーブルは実行時にだけ利用でき、ステートメントの実行時には利用できないため、 bcp ステートメントは失敗します。 このような場合、ストアド プロシージャの結果をテーブルに挿入し、 bcp を使用してテーブルからデータ ファイルにデータをコピーすることを検討してください。
で
ファイルからデータベース テーブルまたはビューへのコピーを行います。 一括コピーの方向を指定します。
アウト
データベースのテーブルまたはビューからファイルにコピーします。 一括コピーの方向を指定します。
既存のファイルを指定すると、ファイルは上書きされます。 bcp ユーティリティは、データを抽出するときに、空の文字列を null として表し、null 文字列を空の文字列として表します。
data_file
データ ファイルの完全なパス。 SQL Serverにデータを一括インポートする場合は、データ ファイルには指定したテーブルまたはビューにコピーするデータが含まれます。 SQL Serverからデータを一括エクスポートする場合は、データ ファイルにはテーブルまたはビューからコピーしたデータが含まれます。 パスは、1 文字から 255 文字までです。 データ ファイルに含めることができる行の数は最大 2^63 - 1 です。
queryout
クエリからコピーします。データをクエリから一括コピーする場合にのみ指定する必要があります。
フォーマット
指定されたオプション (-n
、-c
、-w
、または -N
) とテーブルやビューの区切り記号に基づいて、フォーマット ファイルを作成します。 データを一括コピーするとき、bcp コマンドはフォーマット ファイルを参照することができるため、フォーマット情報を対話的に再入力する必要がなくなります。
format
オプションには -f
オプションが必要です。XML フォーマット ファイルを作成するには、-x
オプションも必要です。 詳細については、「 bcp を使用したフォーマット ファイルの作成 (SQL Server)」を参照してください。 値として nul
を指定する必要があります (format nul
)。
-a packet_size
サーバーとの間で送信されるネットワーク パケットごとのバイト数を指定します。 サーバー構成オプションは、 SQL Server Management Studio (または sp_configure
システム ストアド プロシージャ) を使用して設定できます。 ただし、このオプションを使用すると、サーバー構成オプションを個別にオーバーライドできます。
packet_size の有効値は 4,096 バイトから 65,535 バイトです。既定値は 4096
です。
パケット サイズを大きくすると、一括コピーのパフォーマンスを向上させることができます。 さらに大きいサイズのパケットを要求して、許可されない場合、既定値が使用されます。 bcp ユーティリティが生成するパフォーマンス統計には、使用したパケット サイズが示されます。
-b batch_size
一括インポートするデータの行数を指定します。 コミットされる前に、各バッチはすべてのバッチをインポートする個別のトランザクションとしてインポートおよび記録されます。 既定では、データ ファイルのすべての行が 1 つのバッチとしてインポートされます。 複数のバッチに行を分散するには、データ ファイルの行数よりも少ない batch_size を指定します。 バッチのトランザクションが失敗すると、現在のバッチの挿入のみがロールバックされます。 コミットされたトランザクションによって既にインポートされているバッチは、それ以降の失敗による影響を受けません。
このオプションは、-h "ROWS_PER_BATCH=<bb>"
オプションと共に使わないでください。
-c
文字データ型を使用して操作を実行します。 このオプションを指定すると、フィールドごとにプロンプトが表示されません。記憶域の型としては char が使われ、プレフィックスはなく、フィールドの区切り記号としては \t
(タブ)、行ターミネータとしては \r\n
(改行文字) が使われます。
-c
は、-w
と互換性がありません。
詳細については、「文字形式を使用したデータのインポートまたはエクスポート (SQL Server)」を参照してください。
-C { ACP |OEM |RAW | code_page }
適用対象: Windows のみ。 Linux および macOS ではサポートされていません。
データ ファイル内のデータのコード ページを指定します。 code_page は、データに char、 varchar、 text 列 (文字値が 127 より大きいか、32 未満) が含まれている場合にのみ当てはまります。
65001 オプションが照合順序/コード ページの指定よりも優先される場合を除き、書式ファイル内の各列の照合順序名を指定する必要があります。
コード ページ値 | 説明 |
---|---|
ACP |
ANSI/Microsoft Windows (ISO 1252)。 |
OEM |
クライアントが使用する既定のコード ページです。 これは、-C が指定されていない場合に使われる既定のコード ページです。 |
RAW |
コード ページの変換は行われません。 したがって、これは最も速いオプションです。 |
<code_page> |
850 などの特定のコード ページ番号を指定します。 バージョン 13 (SQL Server 2016 (13.x)) より前のバージョンでは、コード ページ 65001 (UTF-8 エンコード) はサポートされません。 バージョン 13 以降では、UTF-8 エンコードを SQL Serverの前のバージョンにインポートできます。 |
-d database_name
接続先のデータベースを指定します。 既定では、bcp はユーザーの既定のデータベースに接続します。
-d <database_name>
と 3 つの部分で構成される名前 (bcp に最初のパラメーターとして渡される database_name.schema.table) が指定されている場合、データベース名を 2 回指定できないため、エラーが発生します。
database_name がハイフン (-
) またはスラッシュ (/
) で始まる場合は、-d
とデータベース名の間に空白を入れないでください。
-d
bcp -S
オプションに渡された値が、データ ソース名 (DSN) として解釈されるようにします。
DSN を使用すると、次のことができます。
- コマンド ラインを簡略化する埋め込みドライバー オプション
- MultiSubnetFailover などのコマンド ラインからアクセスできないドライバー オプションを適用する
- または、機密性の高い資格情報がコマンド ライン引数として検出されないように保護するために役立ちます。
詳細については、「sqlcmd と bcp での DSN のサポート」を参照してください。
-e err_file
bcp ユーティリティがファイルからデータベースに転送できなかったすべての行を格納するエラー ファイルの完全なパスを指定します。 bcp コマンドからのエラー メッセージは、ユーザーのワークステーションに送られます。 このオプションが使われていない場合、エラー ファイルは作成されません。
err_file がハイフン (-
) またはスラッシュ (/
) で始まる場合は、-e
と err_file 値の間に空白を入れないでください。
-E
インポートしたデータ ファイルの ID 値 (複数可) を ID 列に使用することを指定します。
-E
を指定しない場合、インポートされるデータ ファイルのこの列の ID 値は無視され、SQL Server はテーブルの作成時に指定されたシードと増分の値に基づいて、一意の値を自動的に割り当てます。 詳細については、「DBCC CHECKIDENT」を参照してください。
データ ファイルにテーブルまたはビューの ID 列の値が含まれていない場合は、フォーマット ファイルを使用して、データのインポート時にテーブルまたはビューの ID 列をスキップするように指定します。 SQL Server では、列に一意の値が自動的に割り当てられます。
-E
オプションには、特別なアクセス許可が必要です。 詳細については、後の「解説」を参照してください。
-f format_file
フォーマット ファイルの完全パスを指定します。 このオプションの意味は、オプションが使用されている環境によって次のように異なります。
-f
をformat
オプションと共に使用した場合、指定されたテーブルまたはビューに対して、指定された format_file が作成されます。 XML フォーマット ファイルを作成するには、-x
オプションも指定します。 詳細については、「 bcp を使用したフォーマット ファイルの作成 (SQL Server)」を参照してください。in
またはout
オプションと共に使う場合、-f
には既存のフォーマット ファイルが必要です。注意
in
またはout
オプションでは、フォーマット ファイルは省略可能です。-f
オプションを省略すると、-n
、-c
、-w
、または-N
を指定しなかった場合に、コマンドによってフォーマット情報が要求され、それに対する応答がフォーマット ファイルに保存されます (既定のファイル名はbcp.fmt
)。
format_file がハイフン (-
) またはスラッシュ (/
) で始まる場合は、-f
と format_file 値の間に空白を入れないでください。
-F 最初の行
テーブルからエクスポートする最初の行、またはデータ ファイルからインポートする最初の行の番号を指定します。 このパラメーターには、0 より大きく (>
0)、行の合計数以下 (<
または =
) の値が必要です。 このパラメーターがない場合、既定ではファイルの最初の行となります。
first_row には、2^63-1 以下の正の整数を指定できます。
-F
first_row は 1 から始まります。
-G
適用対象: Azure SQL Database、Microsoft Fabric SQL Database、Azure Synapse Analytics のみ。
このスイッチは、ユーザーが Microsoft Entra ID で認証されることを指定するためにクライアントによって使用されます。
-G
スイッチには、バージョン 14.0.3008.27 以降のバージョンが必要です。 バージョンを判断するには、 bcp -v
を実行します。 詳細については、「 SQL Database での Microsoft Entra 認証の使用」または「Microsoft Fabric の SQL Database での Azure Synapse Analytics または 認証」を参照してください。
重要
Linux および macOS では、Microsoft Entra 対話型認証は現在サポートされていません。 Microsoft Entra 統合認証には、Microsoft ODBC Driver 17 for SQL Server バージョン 17.6.1 以降と、適切に構成された Kerberos 環境が必要です。
お使いのバージョンの bcp に Microsoft Entra 認証のサポートが含まれているかどうかを調べるには、「bcp --help
」と入力して、使用できる引数の一覧に -G
が表示されることを確認します。
Microsoft Entra ユーザー名とパスワード
Microsoft Entra のユーザー名とパスワードを使用するには、
-G
オプションを指定し、-U
と-P
のオプションを指定してユーザー名とパスワードを使用することもできます。次の例では、Microsoft Entra のユーザー名とパスワードの認証情報を使用してデータをエクスポートします。 この例では、Azure server
bcptest
からデータベースtestdb
のテーブルaadserver.database.windows.net
をエクスポートし、データをファイルc:\last\data1.dat
に格納します。bcp bcptest out "c:\last\data1.dat" -c -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com -P xxxxx
次の例では、Microsoft Entra ユーザーの認証情報を使用してデータをインポートします。 この例では、Microsoft Entra のユーザー名とパスワードを使用して、Azure サーバー
c:\last\data1.dat
上のデータベースbcptest
のテーブルtestdb
にファイルaadserver.database.windows.net
のデータをインポートします。bcp bcptest in "c:\last\data1.dat" -c -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com -P xxxxx
Microsoft Entra 統合
Microsoft Entra 統合認証の場合、ユーザー名とパスワードを使用しない
-G
オプションを指定します。 この構成では、現在の Windows ユーザー アカウント (bcp コマンドの実行に使用されているアカウント) が Microsoft Entra ID とフェデレーションされている必要があります。次の例では、Microsoft Entra 統合認証を使用してデータをエクスポートします。 この例では、Microsoft Entra ID とフェデレーションされた Windows 認証情報を使用して、論理サーバー
bcptest
上のデータベースtestdb
からテーブルaadserver.database.windows.net
をエクスポートし、データをファイルc:\last\data2.dat
に格納します。bcp bcptest out "c:\last\data2.dat" -S aadserver.database.windows.net -d testdb -G -c
次の例では、Microsoft Entra 統合認証を使用してデータをインポートします。 この例では、Microsoft Entra ID とフェデレーションされた Windows 認証情報を使用して、論理サーバー
c:\last\data2.dat
上のデータベースbcptest
内のテーブルtestdb
にファイル テーブルaadserver.database.windows.net
のデータをインポートします。bcp bcptest in "c:\last\data2.dat" -S aadserver.database.windows.net -d testdb -G -c
Microsoft Entra マネージド サービス ID
重要
bcp はドライバーと密接に結合されています。 bcpと DSN が作成されるドライバーの両方のメジャー バージョンは同じである必要があります。 バージョンを判断するには、
bcp -v
を実行します。Windows でマネージド サービス ID を使用して bcp 経由でデータをエクスポートするには、DSN を設定する必要があります。
Windows を実行しているコンピューターで DSN を構成するには:
キーボードの Windows キーを押します
「
ODBC
」と入力し、ODBC データ ソース管理者の適切なバージョンを選択します[ユーザー DSN] または [システム DSN] タブのいづれかを選択します
[追加] を選択し、プロンプトに従います
認証タイプを求められた場合は、Azure マネージド サービス ID 認証を選択します
ユーザー割り当てマネージド ID がある場合は、[認証] タブの下部にある
Object (principal) ID
ボックスに ID の を貼り付けますDSN を構成するには、プロンプトに従って続行します。
スクリーンショットを含む完全なチュートリアルについては、「UI で DSN を作成および編集する」を参照してください。
DSN が設定されたら、 フラグを使用して
-D
を呼び出し、-S
に渡される値が DSN であることを示すことができます。bcp bcptest out "c:\last\data1.dat" -c -D -S myDSN -d testdb
Microsoft Entra ID アクセス トークン
適用対象: Linux と macOS のみ。 Windows はサポートされていません。
bcp 17.8 以降のバージョン (Linux および macOS) のユーザーは、トークンを使用して認証することもできます。 次の例では、Linux で PowerShell を使用して、アクセス トークンを取得します。
この例では、アクセス トークンを取得し、システム割り当てマネージド ID を使用してデータをエクスポートするファイルに配置します。
Connect-AzAccount -Identity $access_token | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile bcp bcptest out data2.dat -S aadserver.database.windows.net -d testdb -G -P /tmp/tokenFile -c
この例では、アクセス トークンを取得してトークン ファイルに配置するために、
Client ID
の-AccountId
パラメーターにConnect-AzAccount
を渡します。 トークンは、指定されたユーザー割り当てマネージド ID を使用してデータをエクスポートするために使用されます。Connect-AzAccount -Identity -AccountId 'client_id_of_user_assigned_managed_identity' $access_token | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile bcp bcptest out data2.dat -S aadserver.database.windows.net -d testdb -G -P /tmp/tokenFile -c
Microsoft Entra 対話型
適用対象: Windows のみ。 Linux と macOS はサポートされません。
すべての Azure SQL および SQL Server 2022 (16.x) 以降のバージョンで使用できる Microsoft Entra 対話型認証を使用すると、対話型ダイアログを使用して認証できます。これにより、多要素認証もサポートされます。
Microsoft Entra 対話型認証には 、bcpバージョン 15.0.1000.34 以降と ODBC バージョン 17.2 以降が必要です。
対話型認証を有効にするには、
-G
オプションとユーザー名 (-U
) のみを指定し、パスワードは指定しません。次の例では、Microsoft Entra 対話型認証を使用してデータをエクスポートします。ここでは、Microsoft Entra アカウントのユーザー名の指定が必要になります。
対話モードでは、パスワードを手動で入力する必要があります。また、多要素認証が有効なアカウントの場合は、構成された MFA 認証方法を完了します。
bcp bcptest out "c:\last\data1.dat" -c -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com
フェデレーション ドメインの Windows アカウントである Microsoft Entra ユーザーを使用する場合、コマンド ラインで入力するユーザー名には (たとえば、
joe@contoso.com
のように) そのドメインを含める必要があります。bcp bcptest out "c:\last\data1.dat" -c -S aadserver.database.windows.net -d testdb -G -U joe@contoso.com
ゲスト ユーザーが特定の Microsoft Entra テナントに存在し、 bcp コマンドを実行するためのデータベースアクセス許可を持つ Azure SQL Database に存在するグループの一部である場合、ゲスト ユーザーエイリアスが使用されます (たとえば、
keith0@adventure-works.com
)。
-h "hints [, ... n]"
適用対象: Windows のみ。 Linux および macOS ではサポートされていません。
データをテーブルまたはビューに一括インポートするときに使用するヒントを指定します。
ORDER (列 [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
が指定されている場合は、テーブルを複数のクライアントから同時に読み込むことができます。 既定では、ロック動作はテーブル オプションtable lock on bulkload
によって決まります。 詳細については、「 sp_tableoption」を参照してください。注意
ターゲット テーブルがクラスター化列ストア インデックスの場合、複数の同時実行クライアントによる読み込みに
TABLOCK
ヒントは必要ありません。各同時実行スレッドにはインデックス内に個別の行グループが割り当てられ、データが読み込まれるためです。 詳細については、「 列ストア インデックス: 概要」を参照してください。チェック制約
一括インポート操作中、対象テーブルまたはビューに対するすべての制約を検証します。
CHECK_CONSTRAINTS
ヒントがないと、CHECK
制約とFOREIGN KEY
制約は無視され、操作後、テーブルの制約は信頼されていないとマークされます。注意
UNIQUE
制約、PRIMARY KEY
制約、およびNOT NULL
制約が常に適用されます。テーブル全体の制約は、任意の時点で必ず検証してください。 一括インポート操作の前にテーブルが空でない場合、制約を再検証するコストは、増分データに
CHECK
制約を適用するコストを超える可能性があります。 したがって、通常は、増分一括インポート時の制約チェックを有効にすることをお勧めします。入力データに制約違反の行が含まれている場合などは、制約を無効 (既定の動作) にできます。
CHECK
制約を無効にすると、データをインポートし、Transact-SQL ステートメントを使用して無効なデータを削除できます。bcp によってデータ検証とデータ チェックが実行されるようになったため、無効なデータを含むデータ ファイルに対して実行した場合、このスクリプトは失敗する可能性があります。
注意
-m
max_errors スイッチは、制約チェックには適用されません。発火トリガー
このオプションを in 引数と共に指定すると、コピー先テーブルで定義されているすべての挿入トリガーは、一括コピー操作中に実行されます。
FIRE_TRIGGERS
が指定されていない場合、挿入トリガーは実行されません。FIRE_TRIGGERS
は、out
、queryout
、およびformat
引数では無視されます。
-i input_file(入力ファイル)
適用対象: Windows のみ。 Linux および macOS ではサポートされていません。
応答ファイルの名前を指定します。応答ファイルには、対話モード (-n
、-c
、-w
、または -N
が指定されていない) で一括コピーを実行する場合の、各データ フィールドに関するコマンド プロンプトの質問への応答が含まれます。
input_file がハイフン (-
) またはスラッシュ (/
) で始まる場合は、-i
と input_file 値の間に空白を入れないでください。
-k
一括コピー操作時、空の列には、挿入される列の既定値ではなく、NULL 値が保持されます。 詳細については、「一括インポート中の NULL または既定値の保持 (SQL Server)」を参照してください。
-K application_intent
アプリケーションがサーバーに接続するときのワークロードのタイプを宣言します。 指定できる値は、ReadOnly
だけです。
-K
を指定しない場合、BCP ユーティリティでは Always On 可用性グループのセカンダリ レプリカへの接続がサポートされません。 詳細については、「Always On 可用性グループのセカンダリ レプリカに読み取り専用の負荷を移す」を参照してください。
-l login_timeout
ログインのタイムアウトを指定します。
-l
オプションでは、サーバーへの接続の試行時に、SQL Server へのログインがタイムアウトするまでの秒数を指定します。 既定のログイン タイムアウトは 15 秒です。 ログイン タイムアウトは、0 から 65,534 の数値にする必要があります。 指定した値が数値以外の場合、またはその範囲外の場合、bcp はエラー メッセージを生成します。 値が 0 の場合は、タイムアウトが無期限であることを示します。
-L 最後の行
テーブルからエクスポートする最後の行、またはデータ ファイルからインポートする最後の行の番号を指定します。 このパラメーターには、0 より大きく (>
0)、最後の行の番号以下 (<
または =
) となる値が必要です。 このパラメーターがない場合、既定ではファイルの最後の行となります。
last_row には、2^63-1 以下の正の整数を指定できます。
-m 最大エラー数 (max_errors)
bcp 操作が取り消される前に発生可能な構文エラーの最大数を指定します。 構文エラーは、対象となるデータ型へのデータの変換エラーを意味しています。 max_errors の合計では、制約違反など、サーバーでのみ検出できるエラーはすべて対象外となります。
bcp ユーティリティでコピーできない行は無視され、1 つのエラーとしてカウントされます。 このオプションが指定されない場合の既定値は 10 になります。
注意
-m
オプションは、 money データ型または bigint データ型の変換にも適用されません。
-n
データのネイティブ (データベース) データ型を使用して一括コピー操作を実行します。 このオプションを使用すると、フィールドごとにプロンプトが表示されません。ネイティブ値が使用されます。
詳細については、「ネイティブ形式を使用したデータのインポートまたはエクスポート」を参照してください。
-N
適用対象: Windows のみ。 Linux および macOS ではサポートされていません。
文字以外のデータについてはデータベースのネイティブなデータ型を使用し、文字データについては Unicode 文字を使用して、一括コピー操作を実行します。
-w
オプションの代わりにこのオプションを使用すると、高いパフォーマンスが得られます。このオプションは、データ ファイルを使用して SQL Server のインスタンスから別のインスタンスにデータを転送する場合に使用します。 フィールドごとにプロンプトは表示されません。 ANSI 拡張文字を含むデータを転送し、ネイティブ モードのパフォーマンスを利用する場合は、このオプションを使用します。
詳細については、「Unicode ネイティブ形式を使用したデータのインポートまたはエクスポート (SQL Server)」を参照してください。
データをエクスポートした後で、 を指定して -N
を実行して同じテーブル スキーマにそのデータをインポートした場合、Unicode 以外の固定長の文字の列 (char(10) など) があると、切り捨ての警告が表示されることがあります。
この警告は、無視してもかまいません。 この警告を解決する 1 つの方法は、-n
ではなく -N
を使うことです。
-o output_file (出力ファイル)
適用対象: Windows のみ。 Linux および macOS ではサポートされていません。
コマンド プロンプトからリダイレクトされた出力を受け取るファイル名を指定します。
output_file がハイフン (-
) またはスラッシュ (/
) で始まる場合は、-o
と output_file 値の間に空白を入れないでください。
-P パスワード
ログイン ID のパスワードを指定します。 このオプションを指定しない場合、bcp コマンドによってパスワードが要求されます。 このオプションをパスワードなしでコマンド プロンプトの最後で使用する場合、 bcp は既定のパスワード (NULL
) を使用します。
重要
空白のパスワードは使用しないでください。 強力なパスワードを使用してください。
パスワードをマスクする場合は、-P
オプションを -U
オプションと共に指定しないでください。 代わりに、 bcp を -U
オプションやその他のスイッチ ( -P
を指定しない) と共に指定した後、 Enter キーを押すと、コマンドによってパスワードの入力が求められます。 この方法を使用すると、入力時にパスワードが確実にマスクされます。
password がハイフン (-
) またはスラッシュ (/
) で始まる場合は、-P
と password 値の間に空白を入れないでください。
-q
bcp ユーティリティと SQL Server のインスタンスの間の接続で、SET QUOTED_IDENTIFIER ON
ステートメントを実行します。 名前に空白や単一引用符が含まれるデータベース、所有者、テーブル、またはビューを指定する場合に、このオプションを使用します。 3 部構成のテーブルまたはビュー名全体を引用符 (""
) で囲みます。
空白や単一引用符を含むデータベース名を指定するには、-q
オプションを使用する必要があります。
-q
は、-d
に渡される値には適用されません。
詳細については、この記事の 「解説 」セクションを参照してください。
-r row_term
行ターミネータを指定します。 既定値は \n
(改行文字) です。 既定の行ターミネータをオーバーライドする場合、このパラメーターを使用します。 詳細については、「 フィールドターミネータと行ターミネータの指定 (SQL Server)」を参照してください。
bcp コマンドでは、行ターミネータを 16 進数表記で指定すると、値は 0x00
で切り捨てられます。 たとえば、0x410041
を指定した場合は、0x41
が使われます。
row_term がハイフン (-
) またはスラッシュ (/
) で始まる場合は、-r
と row_term 値の間に空白を入れないでください。
-R
通貨、日付、時刻のデータを SQL Server に一括コピーする場合に、クライアント コンピューターのロケール設定に定義された地域別設定が使用されます。 既定の設定では、地域別設定は無視されます。
-S [server_name[\instance_name]]
接続する SQL Server インスタンスの名前を指定するか、を使用する場合は DSN を指定します。
サーバーを指定しない場合、 bcp ユーティリティは、ローカル コンピューター上の SQL Server の既定のインスタンスに接続されます。 ネットワーク上のリモート コンピューターまたはローカルの名前付きインスタンスから bcp コマンドを実行するときは、このオプションが必要です。 サーバー上にある SQL Server の既定のインスタンスに接続するには、 server_nameのみを指定します。 SQL Server の名前付きインスタンスに接続するには、server_name**\**instance_name を指定します。
-t field_term
フィールド ターミネータを指定します。 既定値は \t
(タブ文字) です。 既定のフィールド ターミネータをオーバーライドする場合、このパラメーターを使用します。 詳細については、「 フィールドターミネータと行ターミネータの指定 (SQL Server)」を参照してください。
bcp コマンドでは、フィールド ターミネータを 16 進数表記で指定すると、値は 0x00
で切り捨てられます。 たとえば、0x410041
を指定した場合は、0x41
が使われます。
field_term がハイフン (-
) またはスラッシュ (/
) で始まる場合は、-t
と field_term 値の間に空白を入れないでください。
-T
bcp ユーティリティが統合セキュリティを使用した信頼関係接続を使用して SQL Server に接続することを指定します。 ネットワーク ユーザーのセキュリティ資格情報 (login_id と password) は必要ありません。
-T
を指定しない場合、正常に接続するには -U
と -P
を指定する必要があります。
重要
bcp ユーティリティが、統合セキュリティを使用したセキュリティ接続で SQL Server に接続している場合は、 -T
とパスポートの組み合わせではなく、 オプション (セキュリティ接続) を使用します。
bcp ユーティリティが SQL Database または Azure Synapse Analytics に接続している場合、Windows 認証または Microsoft Entra 認証の使用はサポートされません。
-U
オプションと -P
オプションを使用します。
-U login_id
SQL Serverへの接続に使用されるログイン ID を指定します。
-u
適用対象:bcp バージョン 18 以降のバージョン。
サーバー証明書を信頼します。 接続の [暗号化] オプションと共に使用すると、自己署名サーバー証明書を使用した暗号化が有効になります。
-v
bcp ユーティリティのバージョン番号と著作権に関する情報を報告します。
-V { 80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 | 170 }
適用対象: Windows のみ。 Linux および macOS ではサポートされていません。
以前のバージョンの SQL Serverのデータ型を使用して一括コピー操作を実行します。 このオプションを使用すると、フィールドごとにプロンプトが表示されません。既定値が使用されます。
-
80
= SQL Server 2000 (8.x) -
90
= SQL Server 2005 (9.x) -
100
= SQL Server 2008 (10.0.x) および SQL Server 2008 R2 (10.50.x) -
110
= SQL Server 2012 (11.x) -
120
= SQL Server 2014 (12.x) -
130
= SQL Server 2016 (13.x) -
140
= SQL Server 2017 (14.x) -
150
= SQL Server 2019 (15.x) -
160
= SQL Server 2022 (16.x) -
170
= SQL Server 2025 (17.x) プレビュー
例えば、SQL Server 2000 (8.x) でサポートされておらず、それ以降のバージョンの SQL Serverで導入された型のデータを生成する場合は、-V80
オプションを使用します。
詳細については、「 以前のバージョンの SQL Server からのネイティブ形式データおよび文字形式データのインポート」を参照してください。
-w
Unicode 文字を使用して一括コピー操作を実行します。 このオプションは、各フィールドに対してプロンプトを表示しません。ストレージの種類として nchar 、プレフィックスなし、フィールド区切り記号として \t
(タブ文字)、行ターミネータとして \n
(改行文字) が使用されます。
-w
は、-c
と互換性がありません。
詳細については、「Unicode 文字形式を使用したデータのインポートまたはエクスポート (SQL Server)」を参照してください。
-X
適用対象: Windows のみ。 Linux および macOS ではサポートされていません。
このオプションは、format
および -f
format_file オプションと共に使用し、既定の XML ではないフォーマット ファイルの代わりに XML ベースのフォーマット ファイルを生成します。
-x
は、データのインポート時やエクスポート時には機能しません。
format
と -f
format_file の両方を指定せずに使用すると、エラーが生成されます。
-Y[s|m|o]
適用対象:bcp バージョン 18 以降のバージョン。
接続時にネットワーク上で TLS 暗号化が使用されるかどうかを指定します。
-Y
は、 o
( optional
の場合)、 m
( mandatory
、既定値)、または s
( strict
の場合) です。
-Y
を含めない場合は、-Ym
(mandatory
の場合) が既定です。
注釈
bcp 13.0 クライアントは、Microsoft SQL Server 2019 (15.x) のツールをインストールしたときにインストールされます。 sql Server の複数のバージョンに対してツールがインストールされている場合は、
PATH
環境変数の値の順序に応じて、bcp 13.0 クライアントではなく以前の bcp クライアントを使用している可能性があります。 この環境変数によって Windows で実行可能ファイルを探すときに使用されるディレクトリのセットが定義されます。 使用しているバージョンを確認するには、Windows のコマンド プロンプトでbcp -v
コマンドを実行します。PATH
環境変数でコマンド パスを設定する方法については、「環境変数」を参照するか、Windows ヘルプで環境変数を検索してください。最新バージョンの bcp ユーティリティを確実に実行するには、以前のバージョンの bcp ユーティリティをすべて削除する必要があります。
すべてのバージョンの bcp ユーティリティがインストールされている場所を確認するには、コマンド プロンプトに次のように入力します。
where bcp.exe
bcp ユーティリティは、Microsoft SQL Server 2016 Feature Pack とは別にダウンロードすることもできます。
ENU\x64\MsSqlCmdLnUtils.msi
またはENU\x86\MsSqlCmdLnUtils.msi
を選択してください。XML フォーマット ファイルは SQL Server ツールが SQL Server Native Client と共にインストールされている場合のみサポートされます。
bcp ユーティリティの検索場所または実行方法、およびコマンド プロンプト ユーティリティの構文規則については、SQL コマンド ライン ユーティリティ (データベース エンジン) を参照してください。
データを一括インポートまたはエクスポート用に準備する方法については、「一括エクスポートまたは一括インポートのデータの準備」を参照してください。
一括インポートによって実行される行挿入操作がトランザクション ログに記録される条件について詳しくは、「 一括インポートで最小ログ記録を行うための前提条件」をご覧ください。
-
文字
<
、>
、|
、&
、^
は特殊なコマンド シェル文字です。文字列の中で使用するには、エスケープ文字 (^
) を前に付けるか、引用符で囲む必要があります (例:"StringContaining&Symbol"
)。 いずれかの特殊文字を含む文字列を引用符で囲む場合、引用符は環境変数値の一部として設定されます。
ネイティブ データ ファイルのサポート
SQL Server の bcp ユーティリティでは、SQL Server 2000 (8.x) 以降の SQL Server バージョンと互換性のあるネイティブ データ ファイルがサポートされています。
計算列とタイムスタンプ列
計算列または timestamp 列にインポートされるデータ ファイル内の値は無視され、 SQL Server によって自動的に値が割り当てられます。 データ ファイルにテーブル内の計算列または timestamp 列の値が含まれない場合は、フォーマット ファイルを使用して、データのインポート時にテーブル内の計算列または timestamp 列を無視するように指定します。この列の値は SQL Server によって自動的に割り当てられます。
計算列と timestamp 列は、通常どおり、 SQL Server からデータ ファイルに一括コピーされます。
空白や引用符を含む識別子を指定する
SQL Server 識別子には、空白や引用符などを埋め込むことができます。 これらの識別子は次のように扱う必要があります。
コマンド プロンプトで空白や引用符を含む識別子またはファイル名を指定する場合、識別子を二重引用符 (" ") で囲みます。
たとえば、次の
bcp out
コマンドでは、Currency Types.dat
という名前のデータ ファイルが作成されます。bcp AdventureWorks2022.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
オプションを使用します。-E
オプションを使用して、データ ファイルから ID 値をインポートします。
注意
ターゲット テーブルに対する ALTER TABLE
アクセス許可の要求は、SQL Server 2005 (9.x) で導入されました。 この要件により、ユーザー アカウントにターゲット テーブルに対するALTER TABLE
アクセス許可がない場合、トリガーと制約チェックを適用しない bcp スクリプトが失敗する可能性があります。
キャラクター モード (-c
) およびネイティブ モード (-n
) のベスト プラクティス
このセクションでは、キャラクター モード (-c
) とネイティブ モード (-n
) の推奨事項について説明します。
(管理者/ユーザー) 可能であれば、ネイティブ形式 (
-n
) を使用して、区切り記号の問題を回避します。 SQL Serverを使用してエクスポートおよびインポートを行うには、ネイティブ形式を使用します。 データを SQL Server 以外のデータベースにインポートする場合は、データをSQL Server からエクスポートするときに-c
または-w
オプションを使用します。(管理者)
bcp out
を使用する場合は、データを確認します。 たとえば、bcp out
を使用し、次にbcp in
、その後データが適切にエクスポートされていること、およびターミネータ値がデータ値の一部として使用されていないことをbcp out
で確認します。 ターミネータ値とデータ値の競合を回避するために、-t
および-r
オプションを使用して、既定のターミネータ値をランダムな 16 進値でオーバーライドすることを検討してください。(ユーザー) 実際の文字列値と競合する可能性を最小限に抑えるために、長くて一意のターミネータ (バイトまたはキャラクターの任意のシーケンス) を使用します。 これには、
-t
および-r
オプションを使用します。
例
このセクションの例では、SQL Server 2016 (13.x) 以降のバージョン、Azure SQL Database、Azure SQL Managed Instance 用の WideWorldImporters
サンプル データベースを使用します。
WideWorldImporters
は https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0 からダウンロードできます。 サンプル データベースを復元する構文については、「RESTORE ステートメント」を参照してください。
テスト条件の例
特記していない場合、この例では、Windows 認証を使用していること、および BCP コマンドを実行しているサーバー インスタンスへのセキュリティ接続があることを前提としています。 多くの例では、D:\bcp
というディレクトリを使用します。
次の Transact-SQL スクリプトは、 WideWorldImporters.Warehouse.StockItemTransactions
テーブルの空のコピーを作成し、主キー制約を追加します。
USE WideWorldImporters;
GO
SET NOCOUNT ON;
IF NOT EXISTS (SELECT *
FROM sys.tables
WHERE name = 'Warehouse.StockItemTransactions_bcp')
BEGIN
SELECT *
INTO WideWorldImporters.Warehouse.StockItemTransactions_bcp
FROM WideWorldImporters.Warehouse.StockItemTransactions
WHERE 1 = 2;
ALTER TABLE Warehouse.StockItemTransactions_bcp
ADD CONSTRAINT PK_Warehouse_StockItemTransactions_bcp
PRIMARY KEY NONCLUSTERED (StockItemTransactionID ASC);
END
必要に応じて、StockItemTransactions_bcp
テーブルを切り詰めます。
TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;
A。 bcp ユーティリティ バージョンの特定
コマンド プロンプトで、次のコマンドを入力します。
bcp -v
B. データ ファイルにテーブル行をコピーする (セキュリティ接続を使用)
次の例は、out
テーブルに対する WideWorldImporters.Warehouse.StockItemTransactions
オプションを示しています。
基本
StockItemTransactions_character.bcp
という名前のデータ ファイルを作成し、 文字 形式を使用してテーブルのデータをこのデータ ファイルにコピーします。コマンド プロンプトで、次のコマンドを入力します。
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -T
拡張
StockItemTransactions_native.bcp
という名前のデータ ファイルを作成し、 ネイティブ 形式を使用してテーブルのデータをこのデータ ファイルにコピーします。 この例では、構文エラーの最大数、エラー ファイル、出力ファイルも指定しています。コマンド プロンプトで、次のコマンドを入力します。
bcp WideWorldImporters.Warehouse.StockItemTransactions OUT D:\bcp\StockItemTransactions_native.bcp -m 1 -n -e D:\bcp\Error_out.log -o D:\bcp\Output_out.log -S -T
Error_out.log
と Output_out.log
を確認します。
Error_out.log
は、空白にする必要があります。
StockItemTransactions_character.bcp
と StockItemTransactions_native.bcp
のファイル サイズを比較します。
C. データ ファイルにテーブル行をコピーする (混合モード認証を使用)
次の例では、out
テーブルに対して WideWorldImporters.Warehouse.StockItemTransactions
オプションを実行します。
StockItemTransactions_character.bcp
という名前のデータ ファイルを作成し、 文字 形式を使用してテーブルのデータをこのデータ ファイルにコピーします。
この例では、混合モード認証を使用していることを前提としているため、ログイン ID の指定に -U
スイッチを使用する必要があります。 また、ローカル コンピューター上にある SQL Server の既定のインスタンスに接続する以外の場合は、 -S
スイッチを使用して、システム名と、オプションでインスタンス名を指定します。
コマンド プロンプトに次のコマンドを入力します。(パスワードの入力を求められます。)
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>
D. ファイルからテーブルにデータをコピーする
次の例では、前に作成したファイルを使用して、in
テーブルでの WideWorldImporters.Warehouse.StockItemTransactions_bcp
オプションを示します。
基本
この例では、以前に作成した
StockItemTransactions_character.bcp
データ ファイルを使用します。コマンド プロンプトで、次のコマンドを入力します。
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -T
拡張
この例では、以前に作成した
StockItemTransactions_native.bcp
データ ファイルを使用します。 この例では、ヒントTABLOCK
を使用し、バッチ サイズ、構文エラーの最大数、エラー ファイル、出力ファイルも指定しています。コマンド プロンプトで、次のコマンドを入力します。
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_native.bcp -b 5000 -h "TABLOCK" -m 1 -n -e D:\bcp\Error_in.log -o D:\bcp\Output_in.log -S -T
Error_in.log
とOutput_in.log
を確認します。
E. データ ファイルに特定の列をコピーする
特定の列をコピーするには、queryout
オプションを使用できます。 次の例では、 StockItemTransactionID
テーブルの Warehouse.StockItemTransactions
列のみをデータ ファイルにコピーします。
コマンド プロンプトで、次のコマンドを入力します。
bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\bcp\StockItemTransactionID_c.bcp -c -T
F. データ ファイルに特定の行をコピーする
特定の行をコピーするには、queryout
オプションを使用できます。 次の例では、 Amy Trefl
という名前の個人の行のみを WideWorldImporters.Application.People
テーブルからデータ ファイル Amy_Trefl_c.bcp
へコピーします。
注意
-d
スイッチは、データベースを識別するために使用されます。
コマンド プロンプトで、次のコマンドを入力します。
bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\bcp\Amy_Trefl_c.bcp -d WideWorldImporters -c -T
G. クエリからデータ ファイルにデータをコピーする
Transact-SQL ステートメントからデータ ファイルに結果セットをコピーするには、 queryout
オプションを使用します。 次の例では、フル ネームで並べ替えた名前を WideWorldImporters.Application.People
テーブルから People.txt
データ ファイルへコピーします。
注意
-t
スイッチは、コンマ区切りファイルを作成するために使用します。
コマンド プロンプトで、次のコマンドを入力します。
bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\bcp\People.txt -t, -c -T
H. フォーマット ファイルを作成する
次の例では、 Warehouse.StockItemTransactions
データベース内の WideWorldImporters
テーブルに対して 3 種類のフォーマット ファイルを作成します。 作成した各ファイルの内容を確認します。
コマンド プロンプトで、次のコマンドを入力します。
REM non-XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.fmt -c -T
REM non-XML native format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_n.fmt -n -T
REM XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.xml -x -c -T
注意
-x
スイッチを使用するには、 bcp 9.0 クライアントを使用している必要があります。
bcp 9.0 クライアントの使用方法については、「解説」セクションを参照してください。
詳細については、「 XML 以外のフォーマット ファイル (SQL Server) と XML フォーマット ファイル (SQL Server) の使用 」 を参照してください。
一 フォーマット ファイルを使って bcp で一括インポートする
SQL Serverのインスタンスにデータをインポートするときに、既に作成してあるフォーマット ファイルを使用するには、 -f
スイッチを in
オプションと共に使用します。 たとえば、次のコマンドは、作成済みのフォーマット ファイル (StockItemTransactions_character.bcp
) を使用して、データ ファイル (Warehouse.StockItemTransactions_bcp
) の内容を StockItemTransactions_c.xml
テーブルのコピーに一括コピーします。
注意
-L
スイッチは、最初の 100 レコードのみをインポートするために使用されます。
コマンド プロンプトで、次のコマンドを入力します。
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\bcp\StockItemTransactions_character.bcp -L 100 -f D:\bcp\StockItemTransactions_c.xml -T
注意
フォーマット ファイルは、データ ファイルのフィールドとテーブル列の数、順序、データ型などが異なる場合に役立ちます。 詳細については、「データをインポートまたはエクスポートするためのフォーマット ファイル (SQL Server)」を参照してください。
J. コード ページを指定する
次の部分的なコード例は、コード ページ 65001 を指定した bcp インポートを示しています。
bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...
K. カスタム フィールドと行ターミネータを使用した出力ファイルの例
この例では、カスタム フィールドと行ターミネータを使用して BCP によって生成される 2 つのサンプル ファイルをご紹介します。
2 つの列
dbo.T1
とtempdb
を含むテーブルID
をName
データベースに作成します。USE tempdb; GO CREATE TABLE dbo.T1 (ID INT, [Name] NVARCHAR (20)); GO INSERT INTO dbo.T1 VALUES (1, N'Natalia'); INSERT INTO dbo.T1 VALUES (2, N'Mark'); INSERT INTO dbo.T1 VALUES (3, N'Randolph'); GO
カスタム フィールド ターミネータを使用して、サンプル テーブル
dbo.T1
から出力ファイルを生成します。この例では、サーバー名は
MYSERVER
され、-t ,
はユーザー設定フィールド ターミネータを指定します。bcp dbo.T1 out T1.txt -T -S MYSERVER -d tempdb -w -t ,
結果セットは次のとおりです。
1,Natalia 2,Mark 3,Randolph
カスタム フィールド ターミネータとカスタム行ターミネータを使用して、サンプル テーブル
dbo.T1
から出力ファイルを生成します。この例では、サーバー名は
MYSERVER
、-t ,
はユーザー設定フィールド ターミネータを指定し、-r :
はカスタム行ターミネータを指定します。bcp dbo.T1 out T1.txt -T -S MYSERVER -d tempdb -w -t , -r :
結果セットは次のとおりです。
1,Natalia:2,Mark:3,Randolph:
注意
行ターミネータは、常に最後のレコードに追加されます。 ただし、フィールド ターミネータは最後のフィールドには追加されません。
追加の例
次の記事では、BCP の使用例をご紹介します:
一括インポートまたは一括エクスポートのデータ形式 (SQL Server)
データをインポートまたはエクスポートするためのフォーマット ファイル (SQL Server)
関連するコンテンツ
- 一括エクスポートまたは一括インポートのデータの準備
- BULK INSERT (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SET QUOTED_IDENTIFIER (Transact-SQL)
- sp_configure (Transact-SQL)
- sp_tableoption (Transact-SQL)
- データをインポートまたはエクスポートするためのフォーマット ファイル (SQL Server)
ヘルプの参照
- SQL に対するご意見:SQL Serverの改善に関するご提案がある場合
- Microsoft Q & A (SQL Server)
- DBA Stack Exchange (tag sql-server):SQL Server に関する質問
- スタック オーバーフロー (tag sql-server):SQL 開発に関する質問とその回答
- MicrosoftSQL Serverライセンス条項および情報
- 法人のお客様向けサポート オプション
- その他の SQL Serverのヘルプとフィードバック
SQL ドキュメントへの投稿
SQL コンテンツを自分で編集できることはご存じですか。 これにより、ドキュメントが改善されるだけでなく、ページの共同作成者としてもクレジットされます。
詳細については、 Microsoft Learn ドキュメントの編集を参照してください。