2010-08-13 6 views
4

Existe-t-il un moyen d'arrêter un package SQL Server 2000 DTS (pas SSIS) en cours d'exécution, en utilisant C#? Je pense que le paquet peut être exécuté en utilisant l'API COM, mais je n'ai pas pu trouver un moyen d'arrêter un paquet en cours d'exécution. Merci d'avance. Mise à jour: il existe une méthode dans SSIS pour obtenir une liste des paquets en cours d'exécution et une méthode pour les arrêter. mais je ne pouvais pas trouver un équivalent pour les paquets DTS dans l'API de l'objet COM.arrête un package DTS par programme (en utilisant C#)

Répondre

0

Voici quelques options:

  1. Si vous exécutez un package DTS dans un emploi, alors vous pouvez arrêter le travail en cours d'exécution avec sp_stop_job.

  2. Si vous connaissez le SPID du processus pour le package DTS, vous pouvez émettre un KILL command au SPID et arrêter l'exécution du package DTS. Une façon possible d'identifier le SPID consiste à rechercher le SPID dans la table master.dbo.sysprocesses par un élément d'information d'identification, puis à exécuter une commande KILL pour le SPID. Voici un ensemble de code que j'ai testé en définissant les propriétés de connexion -> Avancé -> Nom de l'application à Je veux tuer ce SPID.

    DECLARE @TEST INT;

    SET @TEST =

    (SELECT MAX (SPID)

    DE master.dbo.sysprocesses

    OÙ program_name IN ('I Want To Kill Ce SPID'));

    IF @TEST IS NOT NULL

    BEGIN

    DECLARE @KILL_COMMAND NVARCHAR (100);

    SET @KILL_COMMAND = 'KILL' + CONVERT (NVARCHAR (100), @TEST);

    EXEC sp_executeSQL @KILL_COMMAND;

    FIN

    L'inconvénient de l'approche ci-dessus est qu'il ne fonctionne que de tuer les paquets qui ont des connexions de base de données. Si vous utilisez un package DTS qui ne se connecte pas au serveur hôte, il n'y aura pas de SPID pouvant être supprimé. S'il existe plusieurs SPID, cela ne les supprimera pas tous. Vous devrez peut-être modifier le code pour créer une liste de SPID à tuer. Ensuite, il y a le fait que vous devez définir le nom de l'application. Vous pouvez définir des valeurs uniques pour chaque package DTS afin de ne pas tuer accidentellement le mauvais paquet. La valeur par défaut semble être définie sur DTS Designer, ce qui peut être dangereux si plusieurs packages sont exécutés sur le serveur.

  3. Vous pourriez être en mesure de démarrer et de tuer les paquets DTS 2000 using extended stored procedures, mais je ne suis pas sûr à 100% que ce soit faisable.

+0

merci pour la réponse. Je ne cours pas le paquet DTS dans un travail. le package est stocké sur le système de fichiers sur le serveur Web et son exécution dans un travail d'agent SQL Server nécessite l'installation du moteur de serveur SQL sur le serveur Web, ce qui n'est pas autorisé conformément aux règles de mon entreprise.mais l'exécution de SSIS et de DTS est installée sur le serveur, ainsi les paquets peuvent être exécutés par programme, mais je n'ai pas pu comprendre comment arrêter les paquets DTS par programme. – RKP

+0

OK. Je suis allé de l'avant et a fourni des détails sur la façon de mettre en œuvre la deuxième option que j'ai mentionné dans le poste. J'espère que cela vous aidera à trouver un moyen valide d'arrêter le paquet. Ce n'est pas une preuve complète, mais cela s'applique à tout processus qui tente de charger des données dans une base de données ou d'exécuter une commande SQL sur une base de données. –

+0

merci pour la réponse, je vais essayer cela. il semble y avoir une autre option directe selon le lien http://support.microsoft.com/?kbid=321525 qui dit que l'événement onQueryCancel fournit une option pour annuler le paquet, mais je ne comprends pas comment faire cela. Si vous avez des indices à ce sujet, s'il vous plaît faites le moi savoir. – RKP

Questions connexes