2017-05-10 4 views
1

Ich habe eine Datei mit dem Namen xyz_20170510_040544_det.txt. Der Datumsstempel ist im Ausdruck mit get date einfacher zu implementieren. Das Problem mit Zeitstempel ist jeden Tag die Zeit in den Dateinamen ändert sich . Also, wie schreibe ich den Ausdruck in diesem FallSSIS Expression Builder

Unten ist der Ausdruck in der ssis Expression Builder für das Paket zu die Datei bekommt ich

bin mit
@[User::DataLoadDir]+"xyz_"+ (DT_STR,4,1252)DATEPART("yyyy" , 
getdate()) + RIGHT("0" + (DT_STR,4,1252)DATEPART("mm" , getdate()), 
2) + RIGHT("0" + (DT_STR,4,1252)DATEPART("dd" , getdate()), 2) +.txt" 

jetzt ist es nicht in der Lage, die Datei zu finden weil der Zeitstempel nicht enthalten ist. Wie gebe ich den Zeitstempel hier ein, weil es jeden Tag anders ist.

Antwort

0

Ich wenden das folgende an, das ein "yyyymmdd_hhmmss" (20170510_132402) Format ergibt, das Sie mit Ihrer DataLoadDir-Variable und ".txt" verketten können.

(DT_STR, 4, 1252) DATEPART ("yyyy", GETDATE()) + rechts ("0" + (DT_STR, 2, 1252) DATEPART ("mm", GETDATE()), 2) + RECHTS ("0" + (DT_STR, 2, 1252) DATEPART ("dd", GETDATE()), 2) + "_" + RECHTS ("0" + (DT_STR, 2, 1252) DATEPART ("hh ", GETDATE()), 2) + RECHTS (" 0 "+ (DT_STR, 2, 1252) DATEPART (" mi ", GETDATE()), 2) + RECHTS (" 0 "+ (DT_STR, 2, 1252) DATEPART ("ss", GETDATE()), 2)

Da ich mehrere Dateien mit diesem Format erzeugt habe, weise ich dies in einem Ausdruck einer Variablen zu und verkette diese Variable dann für jede neue Datei in die Verbindungsmanager. Wenn Sie dies auch tun, empfehle ich den gleichen Ansatz, um Ihr Paket modularer zu machen und Redundanz zu vermeiden. Nehmen Sie die Änderung in einer Variablen vor und sie wird automatisch überall dort angewendet, wo sie verwendet wird.

Da Sie jedoch tatsächlich versuchen, eine Datei aus einem Verzeichnis zu erfassen, das bereits den Zeitstempel enthält, und den Teil nur bis zum Zeitstempel bereitstellen möchten, verwenden Sie den ersten Teil des Dateinamens als Platzhalter. Ich empfehle folgendes:

  • Wenden Sie den folgenden Ausdruck auf eine Variable an. Dies wird nur den "xyz_20170510" Teil Ihres Dateinamens zurückgeben.

    @ [User :: DataLoadDir] + "xyz _" + (DT_STR, 4,1252) DATEPART ("yyyy", getdate()) + RIGHT ("0" + (DT_STR, 4,1252) DATEPART ("mm", GETDATE()), 2) + rechts ("0" + (DT_STR, 4,1252) DATEPART ("dd", GETDATE()), 2)

  • Pass, dass neue Variable als bereit nur zu einer Skript-Aufgabe (die folgende ist C# verwenden), die tun wird, was Sie mit der Datei wollen. Der folgende Code wurde gegenüber dem aus C# example gesammelten Code geändert. Wenn C# nicht vorzuziehen ist, können Sie auch eine ForEach-Schleife verwenden, die im Dateinamen mit einer Systemaufgabe aufgelistet ist. .

String FileWildCard = Dts.Variables [ "User :: FileWildCard"] Value.ToString(); string [] files = System.IO.Directory.GetFiles (@ "\ dev01 \ E $ \ Daten \ Proc \ Opt", @FileWildCard + "* .txt"); foreach (Zeichenfolgendatei in Dateien) { System.IO.File.Copy (Datei, @ "\ dev01 \ E $ \ Daten \ Proc \ Opt test \" + System.IO.Path.GetFileName (Datei), true); }

Bitte lassen Sie mich wissen, wenn dies hilft.

+0

mein Zeitstempel variiert jeden Tag für die Datei. Die Zeilen RECHTS ("0" + (DT_STR, 2, 1252) DATEPART ("hh", GETDATE()), 2) + RECHTS ("0" + (DT_STR, 2, 1252) DATEPART ("mi", GETDATE ()), 2) + RECHTS ("0" + (DT_STR, 2, 1252) DATEPART ("ss", GETDATE()), 2) bekomme ich die aktuelle Zeit. Wie konfiguriere ich es, um den wechselnden Dateinamen jeden Tag zu bekommen –

+0

Ihr Problem ist verwirrend. Am Anfang klang es so, als ob Sie nur eine Datei erzeugen wollten, die den Zeitstempel im Dateinamen dynamisch enthält. Aber jetzt verstehe ich nicht. Was meinst du "es konfigurieren, um den wechselnden Dateinamen jeden Tag zu erhalten"? Was ist das "große Bild" Ziel mit der Datei generiert? Generieren Sie es tatsächlich nicht, sondern versuchen, es aus einem Verzeichnis zu erfassen, das nur auf dem Datumsstempelteil basiert (den Zeitstempel ignorierend)? – user3662215

+0

Ja, ich brauche eine Datei aus dem Ordner, die den Zeitstempel ignoriert –