プログラムでC#を使用して、現在実行中のSQL Server 2000 DTS(SSISではない)パッケージを停止する方法はありますか?パッケージはCOMAPIを使用して実行できると思いますが、実行中のパッケージを停止する方法が見つかりませんでした。前もって感謝します。
更新:SSISには、実行中のパッケージのリストを取得するメソッドと、それらを停止するメソッドがあります。しかし、COMオブジェクトAPIでDTSパッケージに相当するものを見つけることができませんでした。
ここにいくつかのオプションがあります:
ジョブでDTSパッケージを実行している場合は、 sp_stop_jobを使用して実行中のジョブを停止できます。
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に設定されているようですが、サーバーで複数のパッケージが実行されている場合、これを強制終了するのは適切ではありません。
拡張ストアドプロシージャを使用してDTS2000パッケージを起動および強制終了できる場合がありますが、これが実行可能かどうかは100%わかりません。