SQL Server BCP:如何在所有字段周围加上引号?

时间:2010-01-13 23:29:38

标签: sql-server csv bcp

我有这个BCP命令:

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

我得到的输出CSV没有在字段名称周围加上引号,而是将它放在逗号周围!如何让/t"\",\""在所有字段周围加上引号。

全部谢谢

6 个答案:

答案 0 :(得分:10)

除了字段终止符之外,设置行终止符应该可以使用

'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'

答案 1 :(得分:8)

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

答案 2 :(得分: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

答案 3 :(得分:1)

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

我遇到了同样的问题,并发现此工作方法很有用:使用不寻常的字段终止符,例如|甚至是字符串/#/都是非常独特的,不应与您的字符串内容混淆。您还可以使用十六进制值(限制,请参见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 

答案 4 :(得分:1)

或者,如果您适合使用基于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

答案 5 :(得分: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并删除分隔符和一个字段在field1中

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

这个技巧很有用,因为你要添加一个字段(文件的接口)来检测第一个seprator,这会产生一个始终为null的值,但不会添加一行(查询输出的接口)。