4

有没有办法停止当前正在运行的 SQL Server 2000 DTS(不是 SSIS)包,以编程方式使用 C#?我认为可以使用 COM API 执行包,但我找不到停止正在运行的包的方法。提前致谢。

更新:SSIS 中有一种方法可以获取正在运行的包的列表和一种停止它们的方法。但我在 COM 对象 API 中找不到 DTS 包的等效包。

4

1 回答 1

0

这里有几个选项:

  1. 如果您在作业中运行 DTS 包,则可以使用sp_stop_job停止正在运行的作业。

  2. 如果您知道 DTS 包的进程的 SPID,则可以向 SPID 发出KILL 命令,这将停止 DTS 包的执行。识别 SPID 的一种可能方法是通过一些识别信息在 master.dbo.sysprocesses 表中找到 SPID,然后为 SPID 发出 KILL 命令。这是我通过将 Connection Properties -> Advanced -> Application Name 设置为I Want To Kill This SPID来测试的一组代码。

    声明@TEST INT;

    设置@TEST =

    (选择最大值(SPID)

    FROM master.dbo.sysprocesses

    WHERE program_name IN ('我想杀死这个 SPID'));

    如果@TEST 不为空

    开始

    声明@KILL_COMMAND NVARCHAR(100);

    设置@KILL_COMMAND = '杀死' + 转换(NVARCHAR(100),@TEST);

    执行 sp_executeSQL @KILL_COMMAND;

    结尾

    上述方法的缺点是它仅适用于杀死具有数据库连接的包。如果您使用的 DTS 包未连接到主机服务器,则不会有可终止的 SPID。如果有多个 SPID,这也不会全部杀死它们。您可能必须修改代码以构建要杀死的 SPID 列表。然后是您必须设置应用程序名称的事实。您可能希望为每个 DTS 包设置唯一值,以免意外杀死错误的包。默认值似乎设置为DTS Designer,如果服务器上正在运行多个包,这将是不好的。

  3. 您也许可以使用扩展存储过程启动和终止 DTS 2000 包,但我不能 100% 确定这是可行的。

于 2010-08-13T19:44:53.000 回答