BCP Queryout で処理が二重実行される
本投稿は BCP ユーティリティの queryout オプションを使用した場合の不具合に関する報告です。
事象概要
bcp ユーティリティの queryout オプションを使用した場合、予期せずクエリが 2 回実行される場合があります。
bcp ユーティリティの queryout オプションを使用してコマンドを実行する際、フォーマットファイルを使用することで、
インポート先のテーブルのスキーマとテーブル列のデータ型に準拠して、一括インポートすることができます。
しかしながら、フォーマットファイルでテーブルの各列の照合順序を指定した場合、
フォーマットファイルで指定した照合順序の確認を行う内部動作に起因して、予期せずクエリが 2 回実行される場合があります。
なお 1 回目のクエリ実行後、Attention が記録される場合もありますが、
Attention が記録されず、クエリが 2 回実行される場合もあります。
回避方法
本動作はフォーマットファイルで照合順序を指定して、bcp ユーティリティの queryout オプションを実行した場合に発生することを確認しています。またフォーマットファイルで照合順序を指定しない場合、事象が回避できます。
以下の参考情報の通り、一般的にはフォーマットファイルを使用して、照合順序を明示的に指定することを推奨しておりますが、
本不具合が発生した場合には。フォーマットファイルで照合順序を指定せずに、queryout オプションを実行してください。
なお、フォーマットファイルで照合順序を指定しない場合、インポート先の既定の照合順序に従ってインポートが行われます。
参考情報
bcp ユーティリティ /ja-jp/sql/tools/bcp-utility?view=sql-server-2017