SQL Server:外部停止查询

时间:2009-11-18 11:21:52

标签: php sql-server sqlcmd sql-scripts

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

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

或者这一切都不可能 - 一旦查询运行,你无法阻止它?

全部谢谢

2 个答案:

答案 0 :(得分:3)

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

过去,为了我自己的目的,我已经复制并自定义了这些程序背后的代码。

您可以使用SPID

检查上次在DBCC INPUTBUFFER (@SPID)上执行的查询

您可以使用KILL @SPID

杀死大多数进程

请注意,杀死进程通常不被认为是一个好主意,因为您可能无法确切知道他们正在做什么。

答案 1 :(得分:0)

取决于你如何调用SQLCMD。你是否正在调用exec()? PHP命令不会给你很多控制。

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

然后,在您的主程序中,如果生成过程太久,您可以终止它。

有关PHP exec函数的一些注释可能具有启发性:http://au2.php.net/manual/en/function.exec.php