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

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

最佳答案

这里有几个选项:

  • 如果您正在作业中运行 DTS 包,那么您可以使用 sp_stop_job 停止正在运行的作业。
  • 如果您知道 DTS 包进程的 SPID,您可以向 SPID 发出 KILL command,这将停止 DTS 包的执行。识别 SPID 的一种可能方法是通过一些识别信息在 master.dbo.sysprocesses 表中找到 SPID,然后为 SPID 发出 KILL 命令。这是我通过将 Connection Properties -> Advanced -> Application Name 设置为 来测试的一组代码,我想杀死这个 SPID

    声明@TEST INT;

    设置@TEST =

    (选择最大值(SPID)

    从 master.dbo.sysprocesses

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

    如果@TEST 不为空

    开始

    声明@KILL_COMMAND NVARCHAR(100);

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

    EXEC sp_executeSQL @KILL_COMMAND;

    结尾

    上述方法的缺点是它只适用于杀死具有数据库连接的包。如果您使用的 DTS 包未连接到主机服务器,则不会有可终止的 SPID。如果有多个 SPID,这也不会将它们全部杀死。您可能需要修改代码以构建要终止的 SPID 列表。然后是您必须设置应用程序名称的事实。您可能希望为每个 DTS 包设置唯一值,以免意外杀死错误的包。默认值似乎设置为 DTS 设计器,如果服务器上运行多个程序包,这将是不好杀死的。
  • 您也许可以启动和终止 DTS 2000 软件包 using extended stored procedures ,但我不是 100% 确定这是可行的。
  • 关于c# - 以编程方式停止 DTS 包(使用 C#),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3479016/

    10-12 05:04