有没有办法运行 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 及以后(向右)。

相关内容