格式文件中的文本限定符导致数据丢失

时间:2016-01-18 18:54:19

标签: sql sql-server csv bulkinsert

我在使用SQL Server批量导入的格式文件时遇到了一个相当奇怪的问题。我有一个有140万行的csv文件,在这个文件中有一个列,其中所有记录的格式都是New York, NY,这显然会因为逗号而导致问题。所以为了解决这个问题,我创建了一个格式文件并将该特定列设置为:

11 SQLCHAR 0 50 "\"," 11 "Called To" SQL_Latin1_General_CP1_CI_AS

最初,我认为这很有效,因为一切似乎都很好地导入了(除了此列中的每个记录都有一个前导引号,但我用查询清理了它)。直到后来我才意识到,当我将此列设置为我拥有的格式时,我设法导入除一行记录之外的所有记录。

我能够追踪到一条记录,并没有任何特殊或独特的信息,至少在服务上没有,但由于某种原因,在使用此格式文件导入时会遗漏。我在格式文件中尝试了几种不同的格式化此列的方法,例如:

11 SQLCHAR 0 50 "\",\"" 11 "Called To" SQL_Latin1_General_CP1_CI_AS

并且

10 SQLCHAR 0 50 ",\"" 10 "Number Called" SQL_Latin1_General_CP1_CI_AS
11 SQLCHAR 0 50 ",\"" 11 "Called To" SQL_Latin1_General_CP1_CI_AS

所有这些其他解决方案都会产生以下错误: The bulk load failed. The column is too long in the data file for row 1, column 11. Verify that the field terminator and row terminator are specified correctly.

当我一起取出文本限定符时,它会导入所有数据,包括之前丢失的那条记录。当然,通过这样做,它让我回到原始问题New York, NY有一个额外的逗号,抛出其余的数据。在这种情况下是否有其他方法可以执行文本限定符,不会导致数据丢失?更好的是,有没有人知道为什么它会导入所有1条记录?以下是导入时丢失的记录的snippit,Call To将是格式文件中的第11列。

Time    Number Called      Call To     Minutes used
3:03  (xxx) xxx-xxxx      VMAIL, CL      1

以下是上述数据的原始版本。

03:03,(xxx) xxx-xxxx,"VMAIL, CL",1

以下是下一行的数据。

03:04,(xxx) xxx-xxxx,"LAS VEGAS, NV",1

0 个答案:

没有答案