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



我在一家公司工作,我们经常为开始使用我们产品的新客户进行进口。有时我们收到的文件中有很多损坏的数据,比如一个特定的列,预计会包含这样的时间

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

但是有些行除了之类的实际数据之外,还保存了一些无用的数据

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

它发生在多列和多行中。对于某些行,附加了无用的数据,而对于某些行则进行了预处理。我的问题是,这些损坏的数据是否可以被过滤,我们是否可以成功导入文件,或者这些文件是无用的,我们应该向我们的客户要求新的文件。

在我的前公司,我们编程了一个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,
    ...

最新更新