有沒有辦法執行 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"

findstr內建於作業系統中,類似 grep。參見 findstr /?以獲得更多選擇。

若要刪除列,請使用cut.exe工具。所以你可以運行:

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

這只會從第 10 個字元開始輸出,從而刪除行號。相應地調整數字 10。您也可以嘗試欄位:

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

這只會輸出欄位 2 及以後的欄位(右側)。

相關內容