【问题标题】:Validate data before uploading through SSIS在通过 SSIS 上传之前验证数据
【发布时间】:2010-05-26 10:44:37
【问题描述】:

我有一个 SSIS 包,可以将 Excel 文件中的数据上传到 Sql Server 2005 表中。

excel 文件将包含从 20k 到 30k 行不等的不同行数据。

当所有数据都正确时,上传工作正常。但是即使在单行中也存在小问题,显然会失败。例如强制值显示为 null、不可转换的值(数据类型不匹配)等。

我想在上传前验证excel文件,想告诉用户哪一行哪一列出错了...

关于如何在不消耗太多时间和资源的情况下完成此任务的任何想法。

谢谢

【问题讨论】:

    标签: sql-server-2005 excel ssis upload


    【解决方案1】:

    加载到没有任何强制值等的临时表中可能是最简单的,并在将其附加到主表之前检查它。

    编辑重新评论

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset 
    
    ''This is not necessarily the best way to get the workbook name
    ''that you need
    strFile = Workbooks(1).FullName
    
    ''Note that if HDR=No, F1,F2 etc are used for column names,
    ''if HDR=Yes, the names in the first row of the range
    ''can be used. 
    ''This is the Jet 4 connection string, you can get more
    ''here : http://www.connectionstrings.com/excel
    
     strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
        & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
    
    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    
    cn.Open strCon
    
    ''Note that HDR=Yes
    ''Pick one:
    strSQL = "SELECT Frst, Secnd FROM TheRange WHERE SomeField Is Null" ''Named range
    strSQL = "SELECT Frst, Secnd FROM [Sheet1$C3:C67] WHERE Val(Secnd)=0" ''Range
    strSQL = "SELECT Frst, Secnd FROM [Sheet1$] WHERE First<Date()" ''Sheet
    
    rs.Open strSQL, cn
    
    Sheets("Sheet2").Cells(2, 1).CopyFromRecordset rs
    

    【讨论】:

    • 事实上我做的完全一样。但是在上传到临时表本身的过程中会出现数据类型转换问题和范围转换问题。
    • 您是否尝试过写入 CSV 然后导入?如果希望用户进行更正,ADO 怎么样?
    • 如果数字字段中有字符值.. 写入 CSV 将解决问题.. 或者我错过了什么。
    • 我不知道如何使用 ADO...请您提供一些参考资料
    • 如果数字字段中有字符值,对于不需要数字或日期或任何字段中的任何特定数据类型的临时表来说应该没有问题。我将在 ADO 上发布一些注释。
    【解决方案2】:

    我最近在 SSIS 中研究了许多类似的包,我能够解决这个问题的唯一方法是有一个类似 Remou's 建议的保留表。

    此表非常通用,其中所有字段均为NULLable 和VARCHAR(255)。然后,我有一个验证存储过程,它在将数据移动到“实时”情况之前检查诸如键入、数据是否存在等内容。虽然它可能不是最优雅的解决方案,但它让您可以控制检查数据的方式,也意味着您不必担心首先将文件转换为 .CSV。

    【讨论】:

    • 好吧..我从来没有想过所有字段都设置为varchar(255)...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多