実際のTAB文字をSQLCMDに渡そうと何度も試みましたが、それを取得することはできません。これまでの私のお気に入りの回避策は、SQLCMD に ASCII の「単位区切り文字」を渡すことです。これは 16 進数の 0x1F であり、Ctrl-_ を入力してコマンド ラインに入力できます (US キーボードでは ctrl-shift になるコントロール アンダースコア)。 -'-' (キーボードの一番上の行の '0' の隣の '-')。
「単位区切り」を使用する利点は、説明のテキストに存在する可能性が非常に低く、この目的のために特別に設計されていることです ( https://en.wikipedia.org/wiki/Delimiterを参照) 。
SQLCMD にそれを実行してもらったので、次のように Unix スタイルの変換コマンドを使用して出力をパイプします。
tr '\037' '\t'
\037 は 'Unit Separator' の 8 進数であり、\t はタブ文字を表し、'tr' はこれらの両方を変換します。スクリプトやシェルで引用符のトリックに頼る必要はありません。
Windows で「tr」を取得するには、GnuWin32 ( http://gnuwin32.sourceforge.net/packages/coreutils.htmを参照)から CoreUtils パッケージをインストールするか、重量を増やして Cygwin (http) などの完全な Unix 環境をインストールします。 ://cygwin.com/)。
2 つをまとめると、次のようになります。
sqlcmd ... -h-1 -W -k -r1 -s^_ ... | tr '\037' '\t'
これにより、タブ付きの出力が得られます。
上記で使用した他のオプションを調べてください。これらは、SQLCMD からクリーンな出力を取得するために不可欠です (順番に、ヘッダーなし、空白をトリム、CRLF をスペースに、エラーを STDERR に (出力ファイルではありません!)、 '^_' は、コマンド ラインでの単位区切り記号の表示方法です)。「SET NOCOUNT ON;」も追加する必要があります。そうしないと、出力に表示される試行メッセージとして行数が取得されます。