sql-server - bcp在CSV中添加额外的字符

标签 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机器上。
这是几天前才开始发生的。
我该如何解决?
谢谢!

最佳答案

看起来好像高ASCII字符(即> 127)在数据中是self。文件中出现的字符是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]
不知道我的答案能为您提供多长时间。但是,如果能以某种方式有所帮助,我会很高兴。

关于sql-server - bcp在CSV中添加额外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62611897/

相关文章:

sql-server - 如果目标重新启动,则不会发送 Service Broker 消息

c - 如何使守护进程的子进程在 Linux 中交互?

java - 在启动时使用 cmd 运行 sh 文件 - 能够看到它

sql-server - 将 bcp 放入带有另一个 sql 语句的事务中

mysql - SQL Server 是否提供类似 MySQL 的 ON DUPLICATE KEY UPDATE 功能

SQL表设计帮助

sql-server-2008 - BCP 可以直接从表复制数据吗?

sql-server - BCP 导出到 XML,打开 XML 会出现错误 : Extra content at the end of the document

c# - 尝试从第三方api同步数据

linux - SED:摘自谷歌财经