我正在尝试使用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。
但我导出的结果集将此值显示为两个单独的字段,因为它与逗号分隔。由于这一点,所有的价值都是错误的。怎么纠正这个?如果我的结果集不包含任何不以逗号分隔的字段,则结果看起来很好。
答案 0 :(得分:2)
使用BCP有 - AFAIK - 无法逃脱分隔符。
因此你应该总是
QOUTENAME
来获取qouted名称,而不是将qoutes作为字符连接到字符串中您的导出应该是
OtherValues,"Job completed fine,Next run will be @6PM",OtherValues
BCP将把所有qoutes内部处理为一个字符串......
答案 1 :(得分:1)
这里有一些选择。
第一个选项:你可以使用另一个字段终止符,如tab,|,$等...但是你需要确保它是唯一的并且不会出现在任何文本中。您可以使用多个字符来使分隔符唯一,但Excel只能使用单个字符分隔符导入。
第二个选项:您可以在excel导入中使用文本限定符("),在查询中使用QUOTENAME([column],CHAR(34))以获取所有文本字段