0

我正在尝试使用 SQL Server 上的 BULK INSERT 和格式文件导入 .CSV 文件。我已经创建了格式文件并为每个值设置了正确的字段终止符。格式文件已正确验证,我已成功导入一些测试数据。

但是,在引用文本中间遇到逗号时遇到问题,例如:

"SB","7Y4386429Y0351805","B5503","","Chris",1,10,"Paypal","您好抱歉延迟付款,我会尽快付款。"

(示例数据)

我已将格式文件设置为正确识别带引号和不带引号的字段,但最后一个字段中间有一个逗号,这会在导入时产生错误。

我将 FieldTerminator 设置为“,”并尝试将其完全排除在外,但不应该忽略终止符,而是使用格式文件中的终止符吗?

我不明白为什么逗号会导致该字段结束,因为该字段被引号包围。这是设计使然吗?当然应该忽略逗号,因为它与格式文件中的任何字段终止符都不匹配?

我在这里有什么选择?有问题的数据来自 Paypal,因此他们改变导出方式的可能性不大。

有任何想法吗?

如果重要的话,我在下面展示了我的格式文件的第一部分(实际文件包含 56 行)。所有 56 行都具有相同的 SQLCHAR 数据类型、相同的长度和相同的结束值。

10.0                            
56
1   SQLCHAR 0   0   "\""    0   DUMMY   SQL_Latin1_General_CP1_CI_AS                            
2   SQLCHAR 0   100 "\",\"" 1   CH  SQL_Latin1_General_CP1_CI_AS
3   SQLCHAR 0   100 "\",\"" 2   TransactionID   SQL_Latin1_General_CP1_CI_AS
4   SQLCHAR 0   100 "\",\"" 3   InvoiceID   SQL_Latin1_General_CP1_CI_AS
5   SQLCHAR 0   100 "\",\"" 4   PayPalReferenceID   SQL_Latin1_General_CP1_CI_AS

任何帮助将非常感激。

谢谢,

克里斯。

4

2 回答 2

0

据我所知,你做得对 - 从这里获取知识:

http://www.sqlservercentral.com/Forums/Topic18289-8-1.aspx#bm87418

本质上,将分隔符更改为 "\",\"" 就足够了,因为最后一个字段中间的逗号不是 ",",而是 ,

尝试设置链接中的第一个和最后一个分隔符 ("\",\"") 和 ("\"\r") 看看是否有帮助?

或者,预处理文件并用##$##之类的垃圾替换“,”并将 , 替换为 . (或其他字符),然后用“,”##$##,然后导入?除非 , 在最后一个字段中至关重要,否则点通常可以解决问题。

于 2011-04-04T16:13:07.957 回答
0

除此之外,FIELTERMINATOR 值似乎没有任何影响,因为无论我在 SQL 中为 BULK INSERT 是否包含此值,结果仍然相同。因此,当格式文件终止符接管时,我将从现在开始将其排除在外。

但问题仍然存在,我觉得很奇怪为什么引用文本中间的单个逗号会导致字段结束。

于 2011-04-04T16:26:08.810 回答