4

プログラムでC#を使用して、現在実行中のSQL Server 2000 DTS(SSISではない)パッケージを停止する方法はありますか?パッケージはCOMAPIを使用して実行できると思いますが、実行中のパッケージを停止する方法が見つかりませんでした。前もって感謝します。

更新:SSISには、実行中のパッケージのリストを取得するメソッドと、それらを停止するメソッドがあります。しかし、COMオブジェクトAPIでDTSパッケージに相当するものを見つけることができませんでした。

4

1 に答える 1

0

ここにいくつかのオプションがあります:

  1. ジョブでDTSパッケージを実行している場合は、 sp_stop_jobを使用して実行中のジョブを停止できます。

  2. DTSパッケージのプロセスのSPIDがわかっている場合は、SPIDにKILLコマンドを発行すると、DTSパッケージの実行が停止します。SPIDを識別する1つの可能な方法は、master.dbo.sysprocessesテーブルで特定の情報によってSPIDを見つけてから、SPIDに対してKILLコマンドを発行することです。これは、[接続のプロパティ]->[詳細設定]->[アプリケーション名]を[このSPIDを強制終了します]に設定してテストした一連のコードです。

    @TESTINTを宣言します;

    SET @TEST =

    (SELECT MAX(SPID)

    FROM master.dbo.sysprocesses

    WHERE program_name IN('このSPIDを強制終了します'));

    @TESTがNULLでない場合

    始める

    DECLARE @KILL_COMMAND NVARCHAR(100);

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

    EXEC sp_executeSQL @KILL_COMMAND;

    終わり

    上記のアプローチの欠点は、データベース接続を持つパッケージを強制終了する場合にのみ機能することです。ホストサーバーに接続しないDTSパッケージを使用している場合、強制終了可能なSPIDはありません。複数のSPIDがある場合、これもすべてを強制終了するわけではありません。強制終了するSPIDのリストを作成するには、コードを変更する必要がある場合があります。次に、アプリケーション名を設定する必要があるという事実があります。間違ったパッケージを誤って強制終了しないように、DTSパッケージごとに一意の値を設定することをお勧めします。デフォルト値はDTSDesignerに設定されているようですが、サーバーで複数のパッケージが実行されている場合、これを強制終了するのは適切ではありません。

  3. 拡張ストアドプロシージャを使用してDTS2000パッケージを起動および強制終了できる場合がありますが、これが実行可能かどうかは100%わかりません。

于 2010-08-13T19:44:53.000 に答える