我通过PHP使用SQLCMD实用程序运行查询,我想知道是否有办法通过传递进程ID或其他东西来停止我通过另一个SQL命令执行的查询或脚本。
我还使用SQL Server的PHP驱动程序,这样做会更容易吗?
或者这一切都不可能 - 一旦查询运行,你无法阻止它?
全部谢谢
答案 0 :(得分:3)
SQL Server会跟踪所有正在执行的进程。您可以使用存储过程SP_WHO
和SP_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