web-dev-qa-db-ja.com

SQLCMDで列区切り文字としてTABを使用する方法

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でこれを行う方法はありますか?

10
dawntrader

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

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
17
Doogie

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

タブ区切りの出力ファイルを作成する場合は、 [〜#〜] bcp [〜#〜] の方が適切な場合があります。

bcp "select * from mytable" queryout results.txt -S server -T -c
10
Ed Harper

ここで良い答えが見つかりました: タブ区切りのテキストファイルとしてのSQLCMD出力ファイル

  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を実行します
4
JWally

実際のTAB文字をSQLCMDに渡すことを何度も試みましたが、それを取得することができません。これまでの私のお気に入りの回避策は、SQLCMDにASCII "Unit Separator"、16進数の0x1Fであり、Ctrl -_(control underscore、これは、米国のキーボードではctrl-shift -'- '(キーボードの一番上の行の「0」の横にある「-」)になります。

「ユニットセパレータ」を使用する利点は、説明のテキストに存在する可能性が非常に低く、この目的のために特別に設計されていることです( https://en.wikipedia.org/wiki/Delimiterを参照)

SQLCMDにそれを実行させたので、Unixスタイルの変換コマンドを介して出力を次のようにパイプします。

tr '\037' '\t'

\ 037は 'Unit Separator'の8進数で、\ tはタブ文字を表します。'tr 'はこれらの両方を変換します。スクリプトやシェルの引用トリックに依存する必要はありません。

Windowsで「tr」を取得するには、GnuWin32からCoreUtilsパッケージをインストールするか( http://gnuwin32.sourceforge.net/packages/coreutils.htm を参照)、重量を量って完全にインストールします。 Cygwin(http://cygwin.com/)などのUnix環境。

2つを組み合わせると、次のようになります。

sqlcmd ... -h-1 -W -k -r1 -s^_ ... | tr '\037' '\t'

これにより、タブ付きの出力が得られます。

上で使用した他のオプションを調べてください。これらは、SQLCMDからクリーンな出力を取得するために不可欠です(ヘッダーなし、空白のトリミング、CRLFのスペースへのトリミング、STDERRへのエラー(出力ファイルではありません!))。 '^ _'は、ユニットセパレータがコマンドラインに表示される方法です)。また、「SETNOCOUNTON;」を追加する必要があります。クエリまたはSQLスクリプトに追加します。そうしないと、出力に表示される試行メッセージとして行数が取得されます。

3
dsz

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

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

このタブは空白の広いチャンクとして表されますが、単一の文字です。

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

2
David C.

代わりにバッチファイルでコマンドプロンプトウィンドウで作業するには、これが私がそれを解決するために見つけた唯一の方法です:

sqlcmd -S ServerName -E -d database_Name -Q "select col1、char(9)、col2、char(9)、col3、char(9 )、col4、char(9)、col5 from mytable "-o results.txt -W -w 1024 -s" "-m 1

1
Carlos Flores

CHAR(9)で動的SQLを使用します。

SET @cmd ='SQLCMD -S MyServer -d MyDatabase -E -W -Q "SELECT * FROM MyTable" -s"' + CHAR(9) + '" -o "MyFilePath.txt"'
0
user3736075