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