1

我正在使用存储过程将大型 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功能也是最好的吗?

4

1 回答 1

0

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

  1. 将表插入到所有列都是字符串的临时表中。
  2. 将表从那里复制到具有我想要的列类型和结构的适当表中。

在您的情况下,代码的第二部分将是:

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 中或使用格式文件有解决方案。我更喜欢临时表方法,因为我发现使用临时表从数据库中调试数据问题更容易。

于 2013-06-10T11:20:31.423 回答