我试图通过使用微软SQL Server中的bcp命令导出csv文件中的表。
下表为样本数据
Table name : XYZ
col1 col2 col3
abcd,inc. USD,inc 1234
pqrs,inc USD,inc 6789
stuv,inc USD,inc 0009
列值中有逗号,如上所示。
我已经写了.fmt文件如下:
test.fmt
13.0
3
1 SQLCHAR 0 4000 "\",\"" 1 col1 SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 4000 "\",\"" 2 col2 SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 4000 "\r\n" 3 col3 SQL_Latin1_General_CP1_CI_AS
下面是我正在使用的命令:
DECLARE
@V_BCP_QUERY VARCHAR(4000),
@V_BCP_OUTPUT_FILE VARCHAR(1500),
@V_BCP_FORMAT_FILE VARCHAR(1500),
@V_BCP_COMMAND VARCHAR(4000)
begin
SET @V_BCP_QUERY='"SELECT col1,col2,col3 FROM TABS..XYZ"'
SET @V_BCP_OUTPUT_FILE='"D:\OUTPUT.csv"'
SET @V_BCP_FORMAT_FILE='"D:\test.fmt"'
SET @V_BCP_COMMAND='bcp '+@V_BCP_QUERY+' queryout '+@V_BCP_OUTPUT_FILE+' -f '+@V_BCP_FORMAT_FILE+' -T -S "DEV-CR"'
EXECUTE Master.dbo.xp_CmdShell @V_BCP_COMMAND
end
我在OUTPUT.csv文件中获得以下数据:
abcd,inc.","USD,inc","1234
pqrs,inc","USD,inc","6789
stuv,inc","USD,inc","0009
没有“在开始的行和结束的行。而且当我打开这个在excel然后所有的行来在一行
我的要求是以csv文件导出文件。
好心帮忙
2条答案
按热度按时间v2g6jxz61#
你可以一起破解一个解决方案--但是从长远来看,使用正确的工具来完成这项工作会更容易、更好。
不要使用BCP输出单个列,而是创建一个使用所需结果格式化的列:
这将在输出中为您提供一个单列-整个字符串用双引号括起来,每列用双引号括起来,并用'.'分隔符连接。
kse8i1jr2#
当然,这是丑陋的,但它的简单,快速和得到它的完成。