我有一个SSIS包,可以将数据从Excel文件上传到Sql Server 2005表中。
excel文件将有不同的数据行,范围从20k到30k行。
当所有数据都正确时,上传工作正常。但是,即使在一排中存在小问题,但显然也会失败。例如强制值的示例为空,不可转换的值(数据类型不匹配)等。
我想在上传之前验证excel文件,并想告诉用户哪个行和列有错误...
任何关于如何实现这一点的想法,而不会消耗太多时间和资源。
由于
答案 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建议的保留表。
此表极通用,其中所有字段均为NULL
和VARCHAR(255)
。然后我有一个验证存储过程,在我将数据移动到“实时”状态之前检查诸如键入,数据存在等事情。虽然它可能不是最优雅的解决方案,但它可以让您对检查数据的方式进行大量控制,这也意味着您不必担心首先将文件转换为.CSV。