拆分包含一些双引号的一个VARCHAR字段

时间:2013-06-10 11:04:59

标签: sql sql-server-2008 csv

我正在使用存储过程将大型csv文件批量插入到表中,所有这些都在一个设置为varchar(8000)的字段中。我必须这样做,因为一些数据用引号括起来,有些则不是。在SQL Server 2008中可用作批量导入的数据文件,CSV文件必须符合以下限制:

  • 数据字段从不包含字段终止符。
  • 数据字段中的所有值都没有用引号(​​“”)括起来。

我的数据是:

Field1
"data", "data2", "data3", "data4", 123, 567, 354, 5,64,4565,54

现在使用SQL Server进行了一次临时表。我现在如何清理数据并插入到表格中,如下所示:(我已经使用正确的标题设置了这个新表格)

Field1 
data

Field2
data 2

Field 3
data 3 

等等。

最终,它需要在存​​储过程中执行,因为它需要在报告服务中。我一直在看这些函数,但是当一些字段没有双引号时我该如何使它工作呢?逗号就够了吗? XML函数也是最好的吗?

1 个答案:

答案 0 :(得分:0)

我采用以下方法导入数据:

  1. 将表插入到临时表中,其中所有列都是字符串。
  2. 将表格从那里复制到具有我想要的列类型和结构的相应表格中。
  3. 在您的情况下,代码的第二部分将是:

    insert into FinalTable(col1, . . . )
        select (case when left(col1, 1) = '"' then replace(col1, '"', '')
                     else col1
                end),
               (case when isnumeric(col2) = 1 then cast(col2 as float)
                end),
               . . .
        from StagingTable
    

    毫无疑问,SSIS中的解决方案或使用格式文件。我更喜欢临时表方法,因为我发现使用登台表更容易从数据库调试数据问题。