Benutzer mit den meisten Antworten
Ausnahme einer Ausführung eines Auftrages über DTS Paket

Frage
-
Hi,
ich habe einen Auftrag auf meinen SQL 2000 Server, der führt ein DTS Paket immer zum 5 jedes Monats aus. Der Auftrag soll das 11 Monate im Jahr machen. Nur an einem Monat soll er das am 15 des Monats machen. Das kann man in den Aufträgen ja nicht einstellen. Jetzt hab ich die Idee gehabt, das über mein DTS Paket zu lösen, d.h. der Auftrag wird jedes Monat am 5 und am 15 ausgeführt und welche Befehele zum einsatzkommen entscheidet eine Logik im DTS Paket. Nur mein Problem ist mit welchen Bausteinen kann ich die Logik im DTS Paket aufbauen, die erkennt an welchen Tag sie was ausführen soll?
lg
Antworten
-
Hallo azwinzds1,
die einfachste Lösung ist natürlich 12 Aufträge zu generieren, mit den entsprechenden Daten und mit einer jährlichen Wiederholung. Eine andere Möglichkeit besteht darin, eine Hilfstabelle zu erstellen, in der die entsprechenden Daten gespeichert sind. Ich kann mir das ungefähr so vorstellen, das Du einen Auftrag am 5. und 15. jeden Monats laufen lässt, der in der Tabelle nachschaut ob in dem jetzigen Monat eine Ausführung am 5 oder 15 erfolgen so, und bei einem positiven Ergebniss das DTS-Paket ausführt bzw. bei negativem Ergebniss beendet wird. Die entsprechenden Daten dazu kannst du aus GETDATE holen.
Nachtrag: Im Grunde benötigst Du auch nicht 12 Zeitpläne in dem Auftrag sondern 5 dürften auch schon ausreichen, so das Du etwas Fleißarbeit sparen kannst. Der erste läuft alle 2 Monate, der zweite alle 4 Monate und für die restlichen drei Monate musste dann noch seperate Zeitpläne mit jährlicher Wiederholung angelegt werden.
Gruß Falk
- Bearbeitet Falk Krahl Donnerstag, 10. November 2011 23:37
- Als Antwort vorgeschlagen Stefan HoffmannModerator Samstag, 12. November 2011 10:17
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 24. November 2011 15:35
-
Hallo,
die von Falk vorgeschlagene Lösung mit den 12 Zeitplänen innerhalb eines Auftrags wäre auch meine erster Vorschlag; ist die einfachste Lösung und nur mit etwas Fleißarbeit verbunden.
Eine zweite, aber nicht ganz so schöne Variante wäre ein ActiveX Script Task zu verwenden. Jeder Task hat ja 3 "Ausgänge": Bei Fehler, Bei Erfolg und Bei Beendigung und das könntest Du hierfür nutzen.
Lege mal eine "ActiveX Script Task" mit der Script Sprache "VB Script", dort gibst Du dann den unten stehen Code ein. Ich hoffe mal, es ist halbwegs selbsterklärend: Als Beispiel, wenn der Monat = 12 und Tage = 15 oder eben nicht Monat = 12 und der Tag = 5, dann liefere ein "Success / Erfolg" zurück, sonst einen Fehler. Dann verwendst Du den Ausgang "Bei Erfolg", und im Paket weiter zu gehen; "Bei Fehler" endet das Paket einfach.
Unschön ist halt, das die Paketausführung eben mit einem Fehler endet, was auch so protokolliert wird.Sub Main() Begin If (Month(Now) = 12 AND Day(Now) = 15) OR (Month(now) <> 12 AND Day(Now) = 5) Then return(DTSTaskExecResult_Success) Else return(DTSTaskExecResult_Failure) End If End Sub
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort vorgeschlagen Stefan HoffmannModerator Samstag, 12. November 2011 10:17
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 24. November 2011 15:35
Alle Antworten
-
Hallo azwinzds1,
die einfachste Lösung ist natürlich 12 Aufträge zu generieren, mit den entsprechenden Daten und mit einer jährlichen Wiederholung. Eine andere Möglichkeit besteht darin, eine Hilfstabelle zu erstellen, in der die entsprechenden Daten gespeichert sind. Ich kann mir das ungefähr so vorstellen, das Du einen Auftrag am 5. und 15. jeden Monats laufen lässt, der in der Tabelle nachschaut ob in dem jetzigen Monat eine Ausführung am 5 oder 15 erfolgen so, und bei einem positiven Ergebniss das DTS-Paket ausführt bzw. bei negativem Ergebniss beendet wird. Die entsprechenden Daten dazu kannst du aus GETDATE holen.
Nachtrag: Im Grunde benötigst Du auch nicht 12 Zeitpläne in dem Auftrag sondern 5 dürften auch schon ausreichen, so das Du etwas Fleißarbeit sparen kannst. Der erste läuft alle 2 Monate, der zweite alle 4 Monate und für die restlichen drei Monate musste dann noch seperate Zeitpläne mit jährlicher Wiederholung angelegt werden.
Gruß Falk
- Bearbeitet Falk Krahl Donnerstag, 10. November 2011 23:37
- Als Antwort vorgeschlagen Stefan HoffmannModerator Samstag, 12. November 2011 10:17
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 24. November 2011 15:35
-
Hallo,
die von Falk vorgeschlagene Lösung mit den 12 Zeitplänen innerhalb eines Auftrags wäre auch meine erster Vorschlag; ist die einfachste Lösung und nur mit etwas Fleißarbeit verbunden.
Eine zweite, aber nicht ganz so schöne Variante wäre ein ActiveX Script Task zu verwenden. Jeder Task hat ja 3 "Ausgänge": Bei Fehler, Bei Erfolg und Bei Beendigung und das könntest Du hierfür nutzen.
Lege mal eine "ActiveX Script Task" mit der Script Sprache "VB Script", dort gibst Du dann den unten stehen Code ein. Ich hoffe mal, es ist halbwegs selbsterklärend: Als Beispiel, wenn der Monat = 12 und Tage = 15 oder eben nicht Monat = 12 und der Tag = 5, dann liefere ein "Success / Erfolg" zurück, sonst einen Fehler. Dann verwendst Du den Ausgang "Bei Erfolg", und im Paket weiter zu gehen; "Bei Fehler" endet das Paket einfach.
Unschön ist halt, das die Paketausführung eben mit einem Fehler endet, was auch so protokolliert wird.Sub Main() Begin If (Month(Now) = 12 AND Day(Now) = 15) OR (Month(now) <> 12 AND Day(Now) = 5) Then return(DTSTaskExecResult_Success) Else return(DTSTaskExecResult_Failure) End If End Sub
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort vorgeschlagen Stefan HoffmannModerator Samstag, 12. November 2011 10:17
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 24. November 2011 15:35