2008-10-30 4 views
0

J'ai regardé autour et j'ai trouvé quelques idées sur la façon de le faire, mais pas de meilleure façon définitive. L'une des idées était d'utiliser sp _ démarrer le travail _ pour lancer un travail SQL Server Agent qui exécute le package DTS. Si c'est la meilleure façon de le faire, alors la question suivante serait, "Comment puis-je planifier un paquet DTS à partir d'un travail et le rendre non récurrent?"Quelle est la meilleure façon d'exécuter un package DTS MS SQL Server 2000 à partir d'un déclencheur?

Merci, Tim

Répondre

1

Je ne suggérerais pas d'attacher ce genre de fonctionnalité à un déclencheur. Les déclencheurs sont supposés être rapides. Je ne pense pas qu'il existe un moyen de lancer un paquet DTS qui sera aussi rapide que I voudrait un déclencheur. Si cela résonne avec vous, alors je suggérerais que votre déclencheur insère simplement une rangée dans une table spéciale, et ait alors un travail qui exécute aussi souvent que vous avez besoin pour votre but (chaque minute toutes les 10 secondes?) Qui surveille cette table et lance le paquet DTS approprié selon les besoins.

0

Au lieu d'utiliser xp _ cmdshell, je l'ai fait:

Quand une certaine valeur dans une table change, le déclencheur utilise msdb.sp _ commencer _ travail pour commencer un emploi. Ce travail ne doit pas être exécuté sur un planning, uniquement lorsqu'il est initié par un utilisateur. J'ai défini l'horaire du travail pour qu'il s'exécute une fois, ce qui est maintenant le cas, et j'ai décoché la case activée.

Ce travail a une étape, qui est DTSRun/~ Z0xHEXENCRYPTEDVALUE. Le package DTS copie certaines lignes de ce serveur vers un autre serveur sur une plate-forme différente et réinitialise les valeurs dans la table avec le déclencheur pour la prochaine fois. Le déclencheur vérifie une valeur de table avant d'appeler le travail _ start _, afin que le travail ne démarre que dans certaines conditions, pas toujours.

Depuis que le travail _ commence _ s'exécute de manière asynchrone, le déclencheur se termine rapidement. Le seul inconvénient à cela est que je dois interroger la valeur qui a été réinitialisée en cas de succès et soit laisser l'utilisateur savoir que cela a fonctionné, ou après un certain délai, cela n'a pas fonctionné. L'alternative serait d'utiliser xp_cmdshell si j'avais besoin d'une opération synchrone, ce qui pourrait ne pas être une bonne idée de l'intérieur d'un trigger.

Questions connexes