【问题标题】:Remove column space from sqlcmd output file从 sqlcmd 输出文件中删除列空间
【发布时间】:2026-01-13 10:30:01
【问题描述】:

我正在尝试使用 sqlcmd 将结果从存储过程输出到文本文件。但是,它在结果列(默认分隔符)之间放置了一个空格,我需要删除它。我正在使用下面的代码,并尝试不指定任何内容作为列分隔符,请参见下面的代码 (-s "") 但这不起作用。它给了我一个缺少参数的错误。

sqlcmd -S Server name -U Username-P Password -d Db name-Q 
          "exec Stored procedure" -h -1 -s "" -o c:\newtest.txt

我怎样才能不指定任何东西作为分隔符?

【问题讨论】:

  • 为什么不需要分隔符?没有分隔符怎么解析输出?
  • 它需要是一个固定宽度(参差不齐)的输出,以便可以导入到另一个软件中
  • 不确定 sqlcmd 是否会正确输出

标签: sql-server tsql sqlcmd


【解决方案1】:

可以通过 bcp 来完成,使用 -t 0x90

-t 是 bcp 中的字段终止符。您可以在存储过程和表上使用它,因此它应该可以满足您的所有需求。

我刚刚验证了它的工作原理:

bcp dbname.dbo.tablename out "c:\test.txt" -S serveraddress -U username -P password -t 0x90 -c

使用存储过程类似于:

bcp "EXEC YourDatabaseNameGoesHere.dbo.sp_myproc ''0123,0234,0345''"

【讨论】:

  • 非常感谢!它虽然输出行号。知道如何抑制它们吗?
  • 如果您不希望它是表中的 id/identity 列,您可以将示例中的表字符串替换为仅选择所需字段的 select 语句(用引号括起来)。或者您的存储过程可能正在返回它,在这种情况下,您将不得不更改过程或使用 select 语句。对不起,如果我误解了这个问题。如果解决方案有效,请解决:)
  • 啊,是的!排序谢谢!不幸的是,它删除了空格,但也删除了存储过程中设置的格式。每列都需要设置宽度,但使用此过程似乎已更改了固定宽度。有没有办法可以删除列之间的空间,但不能删除列本身的空间?这是我的代码: bcp "EXEC LandChargesLive.dbo.InternalCreateMonthlyExportFile " queryout "c:\test.txt" -S db2008.dev.local -U Development -P D3v3l0pm3nt -t 0x90 -c