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

影響を受ける行数を表示せずにクエリ出力を取得するために 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)

影響を受ける行数を示す最後の部分を削除する方法を説明したヘルプ ファイルが見つからないようです。

誰かアイデアありますか?

答え1

「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    

最後に行数を減算します。

答え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).
**********************************************************************************/

答え3

sqlcmd -S svr -d db ... | findstr /v "rows affected"

findstrOS に組み込まれており、grep に似ています。その他のオプションについては findstr /? を参照してください。

列を削除するには、cut.exe道具. 次のように実行します:

sqlcmd -S svr -d db ... | cut -c10-

これにより、文字 10 以降のみが出力されるため、行番号は削除されます。それに応じて 10 という数字を調整してください。次のフィールドを試すこともできます。

sqlcmd -S svr -d db ... | cut -f2-

これにより、フィールド 2 以降 (右側) のみが出力されます。

関連情報