【问题标题】:SQL Server: Stopping Queries ExternallySQL Server:从外部停止查询
【发布时间】:2009-11-18 11:21:51
【问题描述】:

我通过 PHP 使用 SQLCMD 实用程序运行查询,我想知道是否有办法通过传递进程 ID 或其他内容来停止我通过另一个 SQL 命令执行的查询或脚本。

我也使用 SQL Server 的 PHP Driver 这样做会更容易吗?

或者这一切都不可能——一旦查询运行就无法停止?

谢谢大家

【问题讨论】:

    标签: php sql-server sqlcmd sql-scripts


    【解决方案1】:

    SQL Server 跟踪所有正在执行的进程。您可以使用存储过程SP_WHOSP_WHO2 查看该列表 - 每个进程都有一个唯一的SPID

    过去,我出于自己的目的复制和定制了这些过程背后的代码。

    您可以使用DBCC INPUTBUFFER (@SPID) 检查上次在SPID 上执行的查询

    您可以使用KILL @SPID 杀死大多数进程

    请注意,通常认为杀死进程并不是一个好主意,因为您可能不确定它们到底在做什么。

    【讨论】:

    • 啊,我明白了。我运行的命令是我运行的命令,有时它们需要被杀死并且数据库刚刚清空所以我想在这种情况下它可以!
    【解决方案2】:

    取决于您如何调用该 SQLCMD。您是否将其作为对 exec() 的调用来运行? PHP 命令没有给你太多的控制权。

    如果您正在做一些耗时的事情,使用生产者-消费者架构可能会更好。让您的主程序发布(到数据库或文本文件)要运行的命令。让一个单独的进程(可能是另一个 PHP 脚本)运行该命令 - 但在它启动 SQLCMD 之前,让它向主程序提供其进程 ID(或其他一些句柄)。

    然后,在您的主程序中,如果生成的进程耗时过长,您可以终止它。

    PHP exec 函数上的一些 cmets 可能很有启发性:http://au2.php.net/manual/en/function.exec.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      相关资源
      最近更新 更多