2016-08-24 2 views
0

Ich habe eine tägliche CSV-Datei zum Laden in die Zieltabelle. Bevor das Laden stattfindet, muss jedoch eine Überprüfung durchgeführt werden. Die Kontroll-CSV-Datei hat eine Datumsspalte sowie eine Spalte für die Datensatzanzahl. Die Überprüfung besteht im Wesentlichen darin, dass die Spalte für die Datensatzanzahl mit der Anzahl der Spalten in der täglichen CSV-Datei und die Datumsspalte in der Steuerungsdatei mit dem aktuellen Datum übereinstimmt.SSIS - Passende CSV-Datei zum Steuern der Datei vor dem Laden zum Ziel

Nachdem die Übereinstimmung erfolgreich war, wird die tägliche CSV-Datei in die Zieltabelle geladen. Ich bin fest, wie der Flow aussehen sollte. Bisher habe ich eine Zeilenzählung für die DailyCSV-Datei und eine bedingte Aufteilung für die Steuerdatei mit dem folgenden Ausdruck durchgeführt.

([Current Date] == (DT_WSTR,12)GETDATE()) && ([Record Count] == (DT_WSTR,4)@[User::DailyCSVRowCount] 

jedoch der Ausgang nur die 2 Spalten der Steuerdatei hat und ich brauche, um den Prozess weiterhin die CSV-Datei auf die Zieltabelle geladen haben.

+0

Ihre Steuerdatei hat nur eine Zeile richtig? –

+0

das ist korrekt. Es hat eine Zeile mit 2 Spalten. 'Current_Date' und 'Record_Count' –

+0

was? Sie versuchen also, den CSV als 1 Zeile 2 Spalten zu laden, dann, wenn es die 2 Prüfungen passiert, laden Sie die gleiche CSV wie mehr Spalten und Zeilen? Vielleicht können Sie Ihr aktuelles Paketdesign wie Datenfluss etc. teilen. – Matt

Antwort

0

Ein Ansatz hierzu besteht darin, eine Skriptaufgabe zu verwenden, um die Validierung der Steuerdatei zu verarbeiten. Die Skriptaufgabe liest die Werte aus der Steuerdatei ein. Dann vergleicht es die Werte mit dem aktuellen Datum und der Anzahl der Zeilen in der täglichen Quelldatei. Unten sehen Sie einen Screenshot eines Kontrollflusses, der diesen Ansatz verwendet. Wenn alles ausgecheckt wird, fließt es in den Datenflusstask, andernfalls wird es an die Mail-Sendeaufgabe gesendet.

enter image description here

Unten ist der Code, den ich in dem Skript-Task verwendet, um die erforderliche Validierung zu erreichen. Es ist in C# geschrieben. Dieser Code berücksichtigt einen Header-Datensatz sowohl in der Steuerungs- als auch in der Quelldatei. Ich möchte dem Blogbeitrag here für die ReadFile-Funktion Anerkennung geben.

public void Main() 
{ 
    string errInfo = ""; 
    string controlFilePath = "Z:\\StackOverFlow\\Control.csv"; 
    string sourceFilePath = "Z:\\StackOverFlow\\Source.csv"; 
    string fileContent = ReadFile(controlFilePath, errInfo); 
    string[] parsedContent = fileContent.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); 
    int controlRows = Int32.Parse(parsedContent[1].Split(',')[0]); 
    string controlDate = parsedContent[1].Split(',')[1]; 
    int sourceRows = -1; 

    using (var reader = File.OpenText(sourceFilePath)) 
    { 
     while (reader.ReadLine() != null) 
     { 
      sourceRows++; 
     } 
    } 

    if (DateTime.Parse(controlDate).Date.Equals(DateTime.Now.Date) && controlRows == sourceRows) 
    { 
     Dts.TaskResult = (int)ScriptResults.Success; 
    } 
    else 
    { 
     Dts.TaskResult = (int)ScriptResults.Failure; 
    } 
} 

public String ReadFile(String FilePath, String ErrInfo) 
{ 
    String strContents; 
    StreamReader sReader; 
    try 
    { 
     sReader = File.OpenText(FilePath); 
     strContents = sReader.ReadToEnd(); 
     sReader.Close(); 
     return strContents; 
    } 
    catch (Exception e) 
    { 
     MessageBox.Show(ErrInfo); 
     ErrInfo = e.Message; 
     return ""; 
    } 
} 
Verwandte Themen