2009-11-18 82 views
0

我使用SQLCMD實用程序通過PHP運行查詢,我想知道是否有辦法通過傳遞進程ID或其他方法來停止通過另一個SQL命令執行的查詢或腳本。SQL Server:外部停止查詢

我也使用SQL Server的PHP驅動程序這樣做會更容易嗎?

或者這是不可能的 - 一旦查詢運行,您無法阻止它?

謝謝全部

回答

3

SQL服務器跟蹤所有正在執行的過程。您可以使用存儲過程SP_WHOSP_WHO2查看該列表 - 每個進程都有一個唯一的SPID

在過去,我爲了自己的目的複製和定製了這些過程背後的代碼。

您可以檢查使用DBCC INPUTBUFFER (@SPID)

可以使用KILL @SPID

請注意,一般不認爲是一個好主意,終止進程,因爲你可能不會殺死大部分過程在SPID最後執行查詢確切地知道他們在做什麼。

+0

啊,我明白了。我運行的命令是我運行的命令,有時它們需要被殺死,並且數據庫只是被清空了,所以它確定我猜在這種情況下! – Abs 2009-11-18 11:56:25

0

取決於您如何調用該SQLCMD。你是否將它作爲exec()的調用運行? PHP命令不會給你很多控制權。

如果您正在做一些耗時的工作,最好使用Producer-Consumer體系結構。讓您的主程序發佈(到數據庫或文本文件)要運行的命令。有一個單獨的進程(可能是另一個PHP腳本)運行該命令 - 但在它啓動SQLCMD之前,讓它向主程序提供其進程ID(或其他句柄)。

然後,在您的主程序中,如果花費的時間過長,則可以殺死生成的進程。

一些對PHP執行函數的意見,可能會有所啓發:http://au2.php.net/manual/en/function.exec.php