SQL Server 2005で単純なクエリを実行していますが、sqlcmdを介してファイルにエクスポートします。ヘッダーとクエリメタデータ(影響を受ける行の数)なしでcsv形式で結果を取得することを望んでいました。ヘッダーには実際には-h -1を指定できますが、どのようにして終了テキストを取り除くことができますか?
今私は持っています
sqlcmd -S klingon -d stardb -i C:\testscript.sql -o C:\testresults.csv -h -1 -s ","
スクリプトは曲の簡単なものです
select x, y, z from agent
残念ながら、結果は次のようになります。
24 aingles1 creablegs
25 tbails12 bull2dog12
26 jtaylor3 Leandon62606
27 forrestw1 nuke19211
(4 rows affected)
影響を受ける行数を示す最後の部分を削除する方法を教えてくれるヘルプファイルに何も見つからないようです。
アイデアは誰ですか?
「SET NOCOUNT ON」オプションが必要かもしれません。 SQLスクリプトは次のようになります。
set nocount on
select x, y, z from agent
set nocount off
そして結果セットは次のようになります:
24 aingles1 creablegs
25 tbails12 bull2dog12
26 jtaylor3 Leandon62606
27 forrestw1 nuke19211
最後に行の行数を差し引いたもの。
sqlcmd -S svr -d db ... | findstr /v "rows affected"
findstr
はOSに組み込まれており、grepに似ています。 findstr /?を参照してくださいその他のオプション。
列を削除するには、 cut.exe
ツール 。だからあなたは走ることができます:
sqlcmd -S svr -d db ... | cut -c10-
これは文字10以降からのみ出力されるため、行番号は削除されます。それに応じて数値10を調整します。フィールドを試すこともできます:
sqlcmd -S svr -d db ... | cut -f2-
これにより、フィールド2以降(右側)のみが出力されます。
Sqlcmd.exeを使用して結果をCSVにエクスポートするときに、次のコードブロックをクエリ自体の先頭に追加して、すべてのメッセージを削除します。
-- Suppress warnings and messages like (2 rows effected)
SET ANSI_WARNINGS OFF;
SET NOCOUNT ON;
-- SQLCMD.exe batch command
:setvar SQLCMDERRORLEVEL 1
-- To Reenable
--:setvar SQLCMDERRORLEVEL 0
/**********************************************************************************
** DISABLING WARNINGS AND MESSAGES
** Disable "Changed database context to 'DatabaseName'." message in the CSV file when using
** SQLCMD.exe. You'll get a syntax error when executing this query in Management
** Studio if SQLCMD Mode is not enabled [Query] --> [SQLCMD Mode].
** :setvar SQLCMDERRORLEVEL 1 is used to disable messages like (152 Rows affected).
**********************************************************************************/