我在使用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