【问题标题】:BCP to .csv delimiter issueBCP 到 .csv 分隔符问题
【发布时间】:2015-01-06 03:58:57
【问题描述】:

我对 bcp 导出到 csv 的结果显示方式有疑问。

以下内容可以正常工作,但以逗号分隔,因此无法满足我的需要。

DECLARE @sql VARCHAR(8000)

SET @sql = 'bcp "SELECT * FROM db..viewname" queryout "C:\test.csv" -c –t, -T -S <SERVERNAME>'

EXEC master..xp_cmdshell @sql

结果:

但是,如果我将“,”更改为管道(或其他任何东西),它就会中断。

DECLARE @sql VARCHAR(8000)

SET @sql = 'bcp "SELECT * FROM db..viewname" queryout "C:\test.csv" -c –t"|" -T -S <SERVERNAME>'

EXEC master..xp_cmdshell @sql

结果:

使用的视图是从带有 WHERE 子句的表中选择的简单列。

我在这里错过了什么..?

【问题讨论】:

  • 将输出文件重命名为 .csv 以外的名称。 Excel 将始终假定它是逗号分隔的(逗号分隔值),并自动加载它。例如,如果您将其命名为 .txt 并手动打开它,您可以告诉 Excel 它是管道分隔的,它会识别管道并正确分解数据。
  • 所以没有办法在默认情况下将其格式化为带有管道分隔符的列? .txt 文件是否需要在初始导出后导入 Excel 并指定为分隔符?
  • 开箱即用的 Excel 不会像它(认为它)知道如何打开 csv 文件一样自动打开管道分隔的文件。您可以手动执行,文件|打开等,或者如果您要经常执行此操作,请编写一个宏来执行此操作。这个问题只是与 Excel 显示数据的方式有关,还是数据导出本身有问题?
  • 在这种情况下,这似乎是我缺乏 Excel 知识的问题。在这种情况下,数据导出很好并且按预期工作。我导出到 .txt,通过 Excel 作为数据导入并使用管道分隔符,一切都很好。感谢您的帮助!

标签: sql-server tsql csv bcp


【解决方案1】:

我知道这是一个老问题,但我昨天才遇到这个问题。要添加管道分隔符,您需要像这样用胡萝卜转义管道:

-t^|

所以像这样设置你的@SQL:

SET @sql = 'bcp "SELECT * FROM db..viewname" queryout "C:\test.csv" -c –t^| -T -S <SERVERNAME>'

希望这对某人有所帮助。 :)

【讨论】:

    猜你喜欢
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多