我有这个BCP命令:
'bcp DBName..vieter out c:\test003.txt -c -T /t"\",\"" -S SERVER'
我得到的输出CSV没有在字段名称周围加上引号,而是将它放在逗号周围!如何让/t"\",\""
在所有字段周围加上引号。
全部谢谢
答案 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="\"" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
这个技巧很有用,因为你要添加一个字段(文件的接口)来检测第一个seprator,这会产生一个始终为null的值,但不会添加一行(查询输出的接口)。