QA@IT

SqlServerにてbcpコマンド実行時、「cd」という条件で出力できない

6504 PV

お世話になります。

あるシステムで、SQLの検索結果をbcpコマンドのqueryoutを使って出力する処理を行なっています。
システム上動作に問題が無かったのですが

DECLARE @command VARCHAR(4000)
set @command = 'bcp "Select *  from Table_name where [Name] Like ''%CD%''"queryout test.csv -c -t, -S server -U TEST -P test'

EXECUTE master.dbo.xp_cmdshell @command

と、「CD」という単語を使ってあいまい検索・出力を行う場合のみ、検索結果が反映されず、0件で出力されます。
「CD」という単語でただ検索した場合にデータは正しく抽出が行われ、
また「CD」を含む単語で出力した場合は問題なく出力が行われております。

なぜか「CD」という単語でのみbcpコマンドで受け付けられません。
これはbcpコマンドのシステム上の問題なのでしょうか?
それともこちらのシステム構築の問題なのでしょうか?

わかる方がいらっしゃったらよろしくお願いします。

回答

%CD% が環境変数 "CD" に置き換わっているからだと思われます。

set @command = 'bcp ^"Select * from Table_name where [Name] Like ''%^CD%''" queryout test.csv -c -t, -S server -U TEST -P test'

適切にエスケープしてあげると上手く動きました。
"CD" に限らず環境変数に定義してある文字だと、エスケープする必要がありそうですね。

Microsoft 公式ではありませんが、エスケープ時に参考にしたサイト:
http://scripting.cocolog-nifty.com/blog/2006/11/post_0369.html
http://d.hatena.ne.jp/thinca/20100210/1265813598

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。