2010-05-26 5 views
2

J'ai un package SSIS pour télécharger des données à partir du fichier Excel dans une table Sql Server 2005.Validation des données avant le chargement via SSIS

Le fichier Excel aura des lignes de données variées allant de 20k à 30k lignes.

Le téléchargement fonctionne correctement, lorsque toutes les données sont correctes. Mais échoue évidemment quand il y a un petit problème même dans une seule rangée. Des exemples comme valeurs obligatoires présentées nulles, les valeurs inconvertable (incompatibilité de type de données), etc.

Je veux valider le fichier Excel avant le téléchargement et que vous voulez dire à l'utilisateur quelle ligne et la colonne a obtenu l'erreur ...

Toute idée sur la façon d'accomplir cela, sans perdre beaucoup de temps et de ressources.

Merci

Répondre

2

Il pourrait être plus facile à charger dans une table temporaire qui n'a pas de valeurs obligatoires etc et vérifiez que avant de l'ajouter à la table principale.

EDIT re commentaire

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 
+0

Enfait Je fais exactement la même chose. Mais le problème de conversion de type de données et le problème de conversion de plage se produisent pendant le téléchargement vers la table temporaire elle-même. –

+0

Avez-vous essayé d'écrire au format CSV, puis d'importer? Si vous voulez que l'utilisateur fasse des corrections, que diriez-vous d'ADO? – Fionnuala

+0

S'il y a une valeur charecter dans un champ numérique. Est-ce que écrire au format CSV résoudra le problème? Ou est-ce que je manque quelque chose? –

2

J'ai récemment travaillé sur un certain nombre de paquets similaires dans SSIS et la seule façon que j'ai pu contourner ce problème est d'avoir une table de maintien semblable suggestion Remou's.

Ce tableau est extrêmement générique, où tous les champs sont en mesure NULL et VARCHAR(255). J'ai alors une procédure stockée de validation qui vérifie des choses telles que la dactylographie, l'existence de données etc. avant que je déplace les données dans une situation «en direct». Bien que ce ne soit peut-être pas la solution la plus élégante, elle vous donne beaucoup de contrôle sur la façon dont vous vérifiez les données et signifie également que vous ne devriez pas avoir à vous inquiéter de la conversion du fichier en .CSV.

+0

Ok. Il ne m'est jamais venu à l'esprit que tous les champs doivent être configurés comme varchar (255) ... –

Questions connexes