12

SQLCMD は列の区切りを指定する -s パラメータをサポートしていますが、タブ (CHAR(9)) 文字を表す方法がわかりませんでした。次のことを試しましたが、どちらも機能しません。

sqlcmd -S ServerName -E -Q"select * from mytable" -s"\t" -o results.txt
sqlcmd -S ServerName -E -Q"select * from mytable" -s'\t' -o results.txt

SQLCMDでこれを行う方法はありますか?

4

12 に答える 12

23

バッチ ファイルでは、二重引用符の間にタブを配置すると機能します。

sqlcmd -S ServerName -E -Q"select * from mytable" -s"   " -o results.txt

PowerShell ファイルで同じことを行うには、エスケープされたタブを囲むエスケープされた二重引用符を使用します

sqlcmd -S ServerName -E -Q"select * from mytable" -s `"`t`" -o results.txt
于 2011-05-25T15:51:26.973 に答える
10

SQLCMD からフォーマットされていない結果を取得することは困難です。

タブ区切りの出力ファイルを作成する場合は、BCPの方が適している可能性があります。

bcp "select * from mytable" queryout results.txt -S server -T -c
于 2010-09-30T10:46:57.447 に答える
6

ここで良い答えを見つけました: SQLCMD outfile as tab delimited text file

  1. メモ帳を開く
  2. これを貼り付けます:sqlcmd -S (local) -E -s"<TAB>" -Q "select * from sys.dm_exec_query_stats" -o MyOutput.txt -h-1 -W
  3. <TAB>を強調表示してから、Tabキーを押します
  4. ファイルを MyBatch.bat として保存します。
  5. MyBatch.bat を実行します
于 2013-01-18T23:20:41.727 に答える
4

実際の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;」も追加する必要があります。そうしないと、出力に表示される試行メッセージとして行数が取得されます。

于 2012-06-12T05:14:43.997 に答える
3

上に投稿されたものと同様の回答ですが、重要だと思う点でより単純です。

  1. テキストエディタを開きます
  2. プレスTab
  3. 作成された空白のチャンク (タブ) を強調表示します
  4. それをコピーしてSQLコマンドのスポットに貼り付けます

このタブは空白の広い塊として表されますが、1 文字です。

もう1つの答えには、コマンド全体を貼り付けるという不必要なものがあり"<TAB>"ました。それは人々をうんざりさせると思います(それは確かに私をうんざりさせました)。

于 2013-11-04T23:02:58.467 に答える