有没有办法停止当前正在运行的 SQL Server 2000 DTS(不是 SSIS)包,以编程方式使用 C#?我认为可以使用 COM API 执行包,但我找不到停止正在运行的包的方法。提前致谢。
更新:SSIS 中有一种方法可以获取正在运行的包的列表和一种停止它们的方法。但我在 COM 对象 API 中找不到 DTS 包的等效包。
这里有几个选项:
如果您在作业中运行 DTS 包,则可以使用sp_stop_job停止正在运行的作业。
如果您知道 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,如果服务器上正在运行多个包,这将是不好的。
您也许可以使用扩展存储过程启动和终止 DTS 2000 包,但我不能 100% 确定这是可行的。