bcp 在 CSV 输出中添加额外的字符

bcp adding extra characters in CSV out

我正在使用一个有两个命令的 bash 脚本:

/opt/mssql-tools/bin/bcp buyerhero.dbo.PeopleEmail OUT "D:/Data/people/PeopleEmail_06272020.csv" -F2  -U<<USER>> -P<<PASSWORD>> -S<<SERVER>> -t"§" -c
gsutil cp D:/Data/people/PeopleEmail_{date}.csv gs://offrs_table_files/PeopleEmail/To_Process/PeopleEmail_06272020.csv

objective是从MSSQL导出数据上传到GoogleBig Query。以上两条命令代表初步

虽然命令有效,但我从 BCP 得到了一个奇怪的输出。

22§7279373929§Line§429734616§1434114003§0§1§Data§2017-07-29§963313836§§143414003§§§§§§§1
23§9097671326§Line§4973325331659§1491223321237§0§1§Data§2017-07-29§963383261§§149031237§§§§§§§1
24§9512444462§Line§2222§5431230333372§0§1§Data§2017-07-29§9852228534§§54303372§§§§§§§1

分隔符是 §。它们前面的奇怪“A”不在 table 中,而是出现在 CSV 中。

我仔细检查了 sql 服务器中的 table,但它们不在那里。 BCP 命令安装在远程 linux 框上。

这几天前才开始发生。 我该如何解决这个问题? 谢谢!

看起来高位 ASCII 字符(即 > 127)在数据中可用,如果 self.文件中出现的字符是 SELECT CHAR(194).

您可以将 Â 替换为空白 (SELECT REPLACE([COLUMNNAME], CHAR(194), '')),从而从数据 (table PeopleEmail) 中删除此字符。但是,我不确定它是否对您的申请有任何意义。因此,我建议在对 table 数据进行任何更新之前 交叉检查并双重确认

您也可以通过将字符 Â 替换为空白来尝试使用 queryout。如下所示

bcp "SELECT REPLACE(COLUMN1+'§'+COLUMN2+'§'+COLUMN3+'§'+COLUMN4, CHAR(194), '') FROM [Database].[Schema].[Table]" queryout "File.csv" -U [Username] -P [Password] -S [Server]

不知道我的回答能帮到你多久。但如果它能以某种方式提供帮助,我会很高兴。