【问题标题】:Is it possible to successfully import a corrupted CSV file in SQL Server?是否可以在 SQL Server 中成功导入损坏的 CSV 文件?
【发布时间】:2016-05-19 14:47:21
【问题描述】:

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

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

但有些行除了像

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

它发生在多列和多行中。对于一些附加无用数据的行和一些附加的行。我的问题是这些损坏的数据是否可以过滤,我们可以成功导入文件还是这些文件没有用,我们应该向我们的客户要求新的文件。

【问题讨论】:

  • 你是如何导入的?西斯?如果是这样,您可以将错误行重定向到保留表进行检查,而不是使整个导入失败。
  • 可能的答案太多,或者对于这种格式来说,好的答案太长了。请添加详细信息以缩小答案范围或隔离可以在几段中回答的问题。

标签: sql-server csv import


【解决方案1】:

在我的前公司,我们编写了一个导入 CSV 的 C# 脚本,即使它们已损坏。基本上,我们将逐行、逐列导入到临时表中。如果一行被破坏了一半,我们只是尽可能多地导入。然后后来在 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,
    ...

【讨论】:

    猜你喜欢
    • 2015-02-02
    • 2014-12-02
    • 2015-03-22
    • 2019-11-03
    • 1970-01-01
    • 2013-10-11
    • 2013-02-20
    相关资源
    最近更新 更多