2016-11-04 3 views
0

J'ai un agent de travail SQL qui comporte deux étapes: PackageA et PackageB. PackageB suit PackageA mais PackageB ne doit jamais être exécuté entre 06:00 et 18:00. Malheureusement, PackageA prend parfois beaucoup de temps à faire fonctionner PackageB entre 6h00 et 18h00. Dans PackageB j'ai une contrainte + expression qui vérifie si l'heure est entre 06:00 et 18:00. Si c'est le cas, PackageB se termine bien et envoie un courrier électronique à un agent lui rappelant de replanifier PackageB. Cependant, les choses seraient beaucoup mieux si je pouvais avoir le paquet replanifier lui-même.Planification d'un package unique à partir du package SSIS

Logic dans le paquet B:

ExpressionTask --> fills variable @Hour with datepart("Hh",GETDATE()) 

Si la valeur trouvée est < 6 ou> 18 la procédure « normale » est exécutée ou il commence un « envoyez un courriel » et les sorties. Ce que je voudrais, c'est d'ajouter une commande après avoir envoyé l'email qui programmerait l'exécution de PackageB une fois le même soir à 19h00. Idéalement, la procédure vérifie s'il y a un travail pour simplement exécuter packageB et planifier l'exécution une fois ce soir à 19h00 et s'il n'y a pas de travail existant pour exécuter PackageB, il doit être créé. Mon sentiment dit que cela devrait être faisable en utilisant TSQL. Des suggestions ou existe-t-il de meilleures façons de le faire en plus d'utiliser TSQL?

Merci d'avoir réfléchi avec moi!

Répondre

1

Vous pouvez mettre en œuvre une étape de travail T-SQL entre PackageA et PackageB ou une tâche d'exécution SQL dans SSIS qui vérifie le temps et utilise l'instruction WAITFOR attendre jusqu'à 19h00.

IF DATEPART(HOUR, SYSDATETIME()) >= 6 OR DATEPART(HOUR, SYSDATETIME()) < 18 
BEGIN 
    WAITFOR TIME '19:00'; 
END; 
+0

Très bonne idée, va tester ce lundi – Henrov