bcp在CSV中添加额外的字符

时间:2020-06-27 15:25:02

标签: sql-server linux bcp

我正在工作的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

目标是从MSSQL导出数据并将其上传到Google Big 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”不在表格中,而是显示在CSV中。

我仔细检查了sql server中的表,但它们不存在。 BCP命令安装在远程linux机器上。

这是几天前才开始发生的。 我该如何解决? 谢谢!

1 个答案:

答案 0 :(得分:1)

如果self的话,数据中似乎提供了高ASCII字符(即> 127)。文件中出现的字符为SELECT CHAR(194)

您可以通过用空白(SELECT REPLACE([COLUMNNAME], CHAR(194), '')代替Â从数据(表PeopleEmail)中删除此字符。但是,我不确定是否对您的应用有任何含义。因此,我建议在对表数据进行任何更新之前,先交叉检查并再次确认

您还可以尝试通过将字符Â替换为空白来使用queryout。像下面这样

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

不确定我的回答可以为您提供多长时间。但是,如果能以某种方式有所帮助,我会很高兴。