[SQL Server] osql でファイルに出力したテキストが途中で折り返される... | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

データベースから抽出したデータを CSV形式に加工し、PRINTステートメントを利用してコンソールに出力するツールを作りました。

これを osql でファイルに出力するようオプションを指定して実行してみたところ、ある程度長い行になると行の途中で折り返されて出力されてしまいました。

OSQL -Usa -Psa -SSERVER1 -dDB1 -i"csvout.sql" -h-1 -n -b -o data.csv
どうやら1行に出力できる文字数に制限があるようです。


そこで、-wオプションをつけてみました。

OSQL -Usa -Psa -SSERVER1 -dDB1 -i"csvout.sql" -h-1 -n -b -w8000 -o data.csv
しかし、やはり折り返します。

最大255文字で折り返し、255文字以内に半角スペースが含まれている場合はそこで折り返したりしているようです。


そこで、osql を sqlcmd に置き換えて試してみました。

SQLCMD -Usa -Psa -SSERVER1 -dDB1 -i"csvout.sql" -h-1 -b -o data.csv
すると、折り返されずに正常に出力することができました。


普通はこんなことをすることはないでしょうから、なかなか気付かない制限だとは思いますが、こういうこういう問題1つとっても、やはり下位互換性維持のために残されている機能にいつまでもすがりつかずに、後継機能を積極的に取り込むことが必要ですね^^;