在通过SSIS上传之前验证数据

时间:2010-05-26 10:44:38

标签: sql-server-2005 excel ssis upload

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

excel文件将有不同的数据行,范围从20k到30k行。

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

我想在上传之前验证excel文件,并想告诉用户哪个行和列有错误...

任何关于如何实现这一点的想法,而不会消耗太多时间和资源。

由于

2 个答案:

答案 0 :(得分:2)

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

编辑重新评论

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

答案 1 :(得分:2)

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

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