10

我有这个 BCP 命令:

'bcp DBName..vieter out c:\test003.txt -c -T /t"\",\"" -S SERVER'

我得到的输出 CSV 没有在字段名称周围加上引号,而是在逗号周围加上引号!我怎样才能/t"\",\""在所有字段周围加上引号。

谢谢大家

4

7 回答 7

11

除了字段终止符之外,设置行终止符应该可以解决问题

'bcp DBName..vieter out c:\test003.txt -c -T -t"\",\"" -r"\"\n\"" -S SERVER'

这可能会起作用,但错过了第一行第一个字段的前导 " ,也许最后一行的最后一个字段 - 我不确定,只是猜测,这里没有服务器!

或尝试使用 QUOTENAME 包装文本字段(您也可以包装数字,但这通常不是必需的。)

'bcp "SELECT id, age, QUOTENAME(name,'"') FROM DBName..vieter" queryout c:\test003.txt -c -T -t"," -S SERVER'
于 2010-01-13T23:37:49.217 回答
8

您需要使用 CHAR(34) 作为报价单。此页面有更多详细信息:http ://www.sqlteam.com/forums/topic.asp?TOPIC_ID=153000

于 2012-12-20T08:24:45.523 回答
3

或者,如果您对基于 Powershell 的脚本没问题,您可以尝试使用下面的代码,它会自动引用。

Invoke-sqlcmd -ConnectionString "Server=SERVERNAME, `
3180;Database=DATABASENAME;Trusted_Connection=True;"  `
-Query "SET NOCOUNT ON;SELECT * FROM TABLENAME" -MaxCharLength 700 | `
Export-Csv -NoTypeInformation -path C:\temp\FileName.csv -Encoding UTF8
于 2020-05-14T11:27:47.490 回答
1

这是我使用的命令列表。

BCP "DECLARE @colnames VARCHAR(max);SELECT @colnames = COALESCE(@colnames + ',', '') + column_name from databaseName.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tableName'; select @colnames;" queryout "C:\HeadersOnly.csv" -r"\n\""  -c -T -Uusername -Ppassword -SserverName

bcp databaseName.schema.tableName out "C:\EmployeeDatawithoutheaders.csv" -T -t"\",\"" -r"\"\n\"" -c -Uusername -Ppassword -SserverName

copy /b C:\HeadersOnly.csv+C:\EmployeeDatawithoutheaders.csv C:\EmployeeData.csv

del C:\HeadersOnly.csv

del C:\EmployeeDatawithoutheaders.csv
于 2017-08-01T10:15:43.040 回答
1
bcp "SELECT char(34) + * +char(34) FROM atable queryout "C:\temp\out.csv" -T -N -c /t"\",\""

这将在每个字段(包括第一个和最后一个)之前和之后加上引号。

于 2018-02-26T20:59:42.290 回答
1

我想您的目标是通过使用唯一标识符清楚地分隔字段值,以便导入过程没有问题。

我遇到了同样的问题,发现这个workaroud很有用:例如,使用不寻常的字段终止符|甚至一个字符串/#/都可能非常独特,不应该弄乱你的字符串内容。您还可以使用 HEX-Values(有限,请参阅https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-2017

出口

bcp DB.dbo.Table out /tmp/output2.csv -c -t "/#/" -U sa -P secret -S localhost

进口

bcp TargetTable in /tmp/output2.csv -t "/#/" -k -U sa -P secret -S localhost -d DBNAME -c -b 50000 
于 2018-08-29T07:42:54.673 回答
0

删除前导引号的实际可行答案是:

A) 使用 bcp 生成格式文件:

bcp db.schema.tabel format nul -c -x -f file.xml -t"\",\"" -r"\"\r\n" -T -k

B) 编辑该文件以手动将字段 1 复制到上面的字段 0,作为第一个字段,设置 Max_Length=1 并删除分隔符和一个引号是在字段 1

<FIELD ID="0" xsi:type="CharTerm" TERMINATOR="\&quot;" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>

这个技巧很有效,因为您正在添加一个字段(文件的接口)来检测第一个分隔符,这会导致始终为空值,但不会添加一行(查询输出的接口)。

于 2017-02-03T14:42:27.317 回答