остановить пакет DTS программно (используя C #) - PullRequest
4 голосов
/ 13 августа 2010

Есть ли способ остановить пакет SQL Server 2000 DTS (не SSIS), который в настоящее время работает, программно с использованием C # ?.Я думаю, что пакет может быть выполнен с использованием COM API, но я не смог найти способ остановить работающий пакет.Заранее спасибо.

Обновление: в SSIS есть метод для получения списка запущенных пакетов и метод для их остановки.но я не смог найти эквивалент для пакетов DTS в API COM-объекта.

1 Ответ

0 голосов
/ 13 августа 2010

Вот несколько вариантов:

  1. Если вы выполняете пакет DTS в задании, вы можете остановить запущенное задание с помощью sp_stop_job .

  2. Если вы знаете SPID процесса для пакета DTS, вы можете выполнить команду KILL для SPID, и это остановит выполнение пакета DTS.Один из возможных способов определения SPID - найти SPID в таблице master.dbo.sysprocesses по некоторой идентифицирующей части информации, а затем выполнить команду KILL для SPID.Вот набор кода, который я протестировал, установив в свойствах соединения -> Дополнительно -> Имя приложения Я хочу убить этот идентификатор .

    DECLARE @TEST INT;

    SET @TEST =

    (SELECT MAX (SPID)

    FROM master.dbo.sysprocesses

    WHERE имя_программы IN («Я хочу убить этот SPID»));

    ЕСЛИ @TEST НЕ НУЛЬ

    НАЧАТЬ

    ОБЪЯВИТЬ @KILL_COMMAND NVARCHAR (100);

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

    EXEC sp_executeSQL @KILL_COMMAND;

    END

    Недостатком вышеупомянутого подхода является то, что он работает только для пакетов уничтожения, которые имеют подключения к базе данных,Если вы используете пакет DTS, который не подключается к хост-серверу, SPID, подлежащий уничтожению, не будет.Если есть несколько SPID, это также не убьет их всех.Возможно, вам придется изменить код, чтобы создать список убиваемых SPID.Тогда есть тот факт, что вы должны установить имя приложения.Вы можете установить уникальные значения для каждого пакета DTS, чтобы случайно не уничтожить неправильный пакет.По умолчанию установлено значение DTS Designer , которое было бы плохо убить, если на сервере запущено несколько пакетов.

  3. Возможно, вы сможете запустить иуничтожить пакеты DTS 2000 , используя расширенные хранимые процедуры , но я не уверен на 100%, что это возможно.

...