是否可以在SQL Server中成功导入损坏的CSV文件?

时间:2016-05-19 14:47:22

标签: sql-server csv import

我在一家公司工作,我们经常为开始使用我们产品的新客户进行进口。有时我们会收到包含大量损坏数据的文件,例如预期包含时间的特定列,如

TIME
----------
17:12:55
22:32:38
12:16:56

但是除了像

这样的实际数据外,有些行还有一些无用的数据
TIME
----------
17:12:55
22:32:38kldjfakdfhehdkdfjdkff
12:16:56

多列和多行都会发生这种情况。对于某些行,附加了无用的数据,并为某些行添加了前缀。我的问题是这些损坏的数据是否可以被过滤,我们是否可以成功导入文件或这些文件是无用的,我们应该向我们的客户要求新文件。

1 个答案:

答案 0 :(得分:0)

在我的前公司,我们编写了一个C#脚本,即使它们已损坏也会导入CSV。基本上我们逐行逐列导入到临时表中。如果行被破坏一半,我们只是尽可能地导入。然后,在SQL中应用了数据质量检查。像这样,可以导入从客户端收到的所有垃圾CSV文件,而不会导致SSIS导入失败。

因此,如果您有时间和耐心,可以编写类似的C#导入(在线提供大量示例)。我们的导入是通用的,因此可以使用相同的脚本导入每个可能的文件,即SQL表中定义的文件的业务逻辑(列映射)。

这样的临时表:

CREATE TABLE [Staging].[FilesStaging](
    [FilesStagingID] [int] IDENTITY(1,1) NOT NULL,
    [ProcessingID] [int] NULL,
    [ImportProcessingID] [int] NOT NULL,
    [ProcessingTypeID] [smallint] NOT NULL,
    [FileName] [varchar](255) NULL,
    [ExcelSheet] [varchar](255) NULL,
    [Col1] [varchar](255) NULL,
    [Col2] [varchar](255) NULL,
    [Col3] [varchar](255) NULL,
    [Col4] [varchar](255) NULL,
    [Col5] [varchar](255) NULL,
    [Col6] [varchar](255) NULL,
    [Col7] [varchar](255) NULL,
    [Col8] [varchar](255) NULL,
    [Col9] [varchar](255) NULL,
    [Col10] [varchar](255) NULL,
    [Col11] [varchar](255) NULL,
    [Col12] [varchar](255) NULL,
    [Col13] [varchar](255) NULL,
    [Col14] [varchar](255) NULL,
    [Col15] [varchar](255) NULL,
    ...