我有一个CSV文件,我直接导入SQL服务器表。在CSV文件中,每列用逗号分隔。但我的问题是我有一个列“地址”,此列中的数据包含逗号。所以发生的事情是地址列的一些数据将转移到其他列将导入到SQL服务器。
我该怎么办?
答案 0 :(得分:38)
对于这个问题,解决方案非常简单。 first select => flat file source =>浏览你的文件=> 比默认情况下去“文本限定符”,这里没有写双引号(“),并按照向导的说明进行操作。
步骤是 - first select => flat file source =>浏览你的文件=>文本限定符(只写“)并按照向导的说明进行操作。
祝你好运答案 1 :(得分:17)
如果列中有逗号,则该列应包含单引号或双引号。然后,如果在该列中有单引号或双引号,它应该在它之前有一个转义章程,通常是\
CSV的示例格式
ID - address - name 1, "Some Address, Some Street, 10452", 'David O\'Brian'
答案 2 :(得分:1)
我建议使用除CSV之外的其他格式,或尝试使用其他字符作为字段分隔符和/或文本分隔符。尝试查找数据中未使用的字符,例如|,#,^或@。单行的格式将变为
|foo|,|bar|,|baz, qux|
行为良好的解析器不能将'baz'和'qux'解释为两列。
或者,您可以编写自己的导入巫术来解决任何问题。对于后者,你可能会发现这个Groovy skeleton很有用(不知道你会说哪些语言很流利)
答案 3 :(得分:1)
大多数系统(包括Excel)都允许将列数据括在单引号中...
COL1,COL2,COL3 'test1','my test2,逗号',test3
另一种方法是使用Macintosh版本的CSV,它使用TAB作为分隔符。
答案 4 :(得分:1)
解决数据问题中逗号的最佳,最快捷和最简单的方法是在将Windows的列表分隔符设置设置为逗号以外的其他内容(例如管道)之后,使用Excel保存逗号分隔文件。然后,这将为您生成一个管道(或其他)分隔文件,然后您可以导入该文件。这被描述为here。
答案 5 :(得分:0)
我不认为添加引用可能会有所帮助。我建议的最佳方法是将内容中的逗号替换为空格等其他标记。
replace(COLUMN,',',' ') as COLUMN
答案 6 :(得分:0)
在两侧的选择列中添加语音标记。如果列是TEXT,您还必须将列转换为NVARCVHAR(MAX)以将其转换为字符串。
SQLCMD -S DB-SERVER -E -Q "set nocount on; set ansi_warnings off; SELECT '""' + cast ([Column1] as nvarchar(max)) + '""' As TextHere, [Column2] As NormalColumn FROM [Database].[dbo].[Table]" /o output.tmp /s "," -W
答案 7 :(得分:0)
新版本完全支持CSV格式,包括“和”的混合使用。
BULK INSERT Sales.Orders
FROM '\\SystemX\DiskZ\Sales\data\orders.csv'
WITH ( FORMAT='CSV');