将sql结果导出为CSV时,如何在单个单元格中使用逗号分隔值

时间:2016-09-26 06:05:40

标签: sql sql-server csv delimiter bcp

我正在尝试使用bcp cmd将查询结果导出到本地路径。

SET @CMD =       'bcp "select * from ##OutputTable" queryout "' + @Path + '\Temp_RawData.csv" -S ' + @@SERVERNAME + ' -T -t , -c'
SET @HEADERCMD = 'bcp "SELECT * from ##cols" queryout "' + @Path + '\Temp_Headers.csv" -S ' + @@SERVERNAME + ' -T -t , -c'
SET @Combine =   'copy "' + @Path + '\Temp_Headers.csv" + "' + @Path + '\Temp_RawData.csv" "' + @Path + '\MyExcel.csv"'
SET @DelCMD =    'del "' + @Path + '\Temp_*.csv"'

但是,结果字段备注之一包含类似

的值
  

工作完成,下次运行将是@ 6PM。

但我导出的结果集将此值显示为两个单独的字段,因为它与逗号分隔。由于这一点,所有的价值都是错误的。怎么纠正这个?如果我的结果集不包含任何不以逗号分隔的字段,则结果看起来很好。

2 个答案:

答案 0 :(得分:2)

使用BCP有 - AFAIK - 无法逃脱分隔符。

因此你应该总是

  • 使用QOUTENAME来获取qouted名称,而不是将qoutes作为字符连接到字符串中
  • 在每个文本周围使用双qoutes。

您的导出应该是

OtherValues,"Job completed fine,Next run will be @6PM",OtherValues

BCP将把所有qoutes内部处理为一个字符串......

答案 1 :(得分:1)

这里有一些选择。

第一个选项:你可以使用另一个字段终止符,如tab,|,$等...但是你需要确保它是唯一的并且不会出现在任何文本中。您可以使用多个字符来使分隔符唯一,但Excel只能使用单个字符分隔符导入。

第二个选项:您可以在excel导入中使用文本限定符("),在查询中使用QUOTENAME([column],CHAR(34))以获取所有文本字段