web-dev-qa-db-ja.com

sqlcmdを実行して、影響を受ける行の数を表示せずにクエリ出力を取得する方法はありますか?

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)

影響を受ける行数を示す最後の部分を削除する方法を教えてくれるヘルプファイルに何も見つからないようです。

アイデアは誰ですか?

6
rumz

「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    

最後に行の行数を差し引いたもの。

8
Anthony K
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以降(右側)のみが出力されます。

2
jftuga

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).
**********************************************************************************/
0
Jason Hughes