SQL 2005 CSV导入引号用内部引号和逗号分隔

时间:2009-04-02 19:09:46

标签: sql-server sql-server-2005 csv import

我有一个带引号文字分隔符的CSV文件。大多数90000行都很好,但是我有一些行包含一个包含引号和逗号的文本字段。例如,字段值为:

  

AB”,AB

当分隔时,这变为

  

“AB” “AB”

当SQL 2005尝试导入此内容时,我会收到错误,例如...

Messages
Error 0xc0202055: Data Flow Task: The column delimiter for column "Column 4" was not found.
 (SQL Server Import and Export Wizard)

只有当引号和逗号一起处于文本值时,才会出现这种情况。像

这样的值

AB“AB成为”AB“”AB“ 要么 AB,AB成为“AB,AB”

工作正常。

以下是一些示例行...

"1464885","LEVER WM","","B","MP17"
"1465075",":PLT-BC   !!NOTE!!","","B",""
"1465076","BRKT-STR MTR            !NOTE!","","B",""
"1465172",":BRKT-SW MTG   !NOTE!","","B","MP16"
"1465388","BUSS BAR                !NOTE!","","B","MP10"
"1465391","PLT-BLKHD     ""NOTE""","","B","MP20"
"1465564","SPROCKET:13TEETH,74MM OD,66MM","ID W/.25"" SETSCR","B","MP6"
"S01266330002","CABLE:224"",E122/261,8 CO","","B","MP11"

最后一行是问题的一个例子 - “”,导致错误。

4 个答案:

答案 0 :(得分:4)

我遇到了SSIS的主要问题。 Access,Excel甚至DTS似乎做得很好,SSIS窒息。可变记录长度数据是另一个问题,但是,这些嵌入式限定符是一个主要问题。特别是如果您无法访问导入文件,因为它们位于您为获得访问权而支付的其他服务器上,甚至可能是4到5 GB的大小!不能只是在每次导入时“替换所有”。

您可能需要在名为“UnDouble”的Microsoft下载中查看此内容,此处是您可能尝试的另一个workaround

在SQL Server 2008中似乎与SSIS一样,错误仍然存​​在。我不知道为什么他们没有在解析器中解决这个问题,但它就像我们在SSIS基本导入功能中回过头来一样。

更新11-18-2010:此错误仍存在于SSIS中。惊人的。

答案 1 :(得分:1)

如何:

  1. 使用''搜索/替换所有“”; (修复所有破碎的字段)
  2. 搜索/替换所有;''; with,“”,(以“解除”正确空字段。)
  3. 搜索/替换所有'';'';使用“”,“”,(以“解除”正确的空字段,这些字段遵循嵌入式分隔符的正确封装。)
  4. 将您的原文转换为:

       "1464885","LEVER WM","","B","MP17"
    "1465075",":PLT-BC   !!NOTE!!","","B",""
    "1465076","BRKT-STR MTR            !NOTE!","","B",""
    "1465172",":BRKT-SW MTG   !NOTE!","","B","MP16"
    "1465388","BUSS BAR                !NOTE!","","B","MP10"
    "1465391","PLT-BLKHD     ""NOTE""","","B","MP20"
    "1465564","SPROCKET:13TEETH,74MM OD,66MM","ID W/.25"" SETSCR","B","MP6"
    "S01266330002","CABLE:224'';E122/261,8 CO","","B","MP11"
    

    这似乎在SSIS中运行得很好。您可能必须以递归方式步骤3来计算一行中的3个空字段('';'';'';等等),但这里的底线是当您嵌入文本限定符时,您必须要转义它们或者替换它们。这将成为您在CSV创建过程中的一个教训。

答案 2 :(得分:1)

Microsoft says在双引号分隔字段内加倍双引号只是不起作用。计划在2011年底修复...

与此同时,我们将不得不使用其他答案中描述的变通方法。

答案 3 :(得分:0)

我只会搜索/替换“,并将其替换为

您是否可以访问原始文件?