
我正在 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 及以後的欄位(右側)。