0

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

我还使用 SQL Server 的 PHP 驱动程序这样做会更容易吗?

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

谢谢大家

4

2 回答 2

3

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

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

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

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

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

于 2009-11-18T11:38:47.317 回答
0

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

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

然后,在您的主程序中,如果生成的进程花费的时间太长,您可以终止它。

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

于 2009-11-18T11:28:25.760 回答