2009-11-18 5 views
0

Я запускаю запросы с помощью утилиты SQLCMD через PHP, и мне хотелось знать, есть ли способ остановить запросы или скрипты, которые я выполнил с помощью другой команды SQL, передав идентификатор процесса или что-то в этом роде.SQL Server: Остановка запросов снаружи

Я также использую PHP-драйвер для SQL Server, было бы проще сделать это?

Или это невозможно - один раз, когда запрос запускается, вы не можете его остановить?

Все

ответ

3

SQL Server отслеживает все выполняющихся процессов. Вы можете просмотреть список с помощью хранимых процедур SP_WHO и SP_WHO2 - каждый процесс имеет уникальный SPID.

В прошлом я скопировал и настроил код этих процедур для своих целей.

Вы можете проверить запрос последний выполненный на SPID с помощью DBCC INPUTBUFFER (@SPID)

Вы можете убить большинство процессов с помощью KILL @SPID

Обратите внимание, что это не считается хорошей идеей, чтобы убить процессы, потому что вы не можете быть точно о том, что они делают.

+0

А, я вижу. Команды, которые я запускаю, - это те, которые я запускаю, а иногда их нужно убить, а база данных просто опустошена, так что я думаю, что в этом случае! – Abs

0

Зависит от того, как вы называете этот SQLCMD. Вы выполняете его как вызов exec()? Команды PHP не дают вам большого контроля.

Если вы занимаетесь чем-то трудоемким, лучше использовать архитектуру Продюсер-Потребитель. Попросите свою основную программу опубликовать (в базу данных или текстовый файл) команду для запуска. Имейте отдельный процесс (возможно, другой скрипт PHP), но перед тем, как он запустит SQLCMD, укажите его идентификатор процесса (или какой-либо другой дескриптор) основной программе.

Затем, в вашей основной программе, вы можете убить порожденный процесс, если он занимает слишком много времени.

Некоторые замечания о функции PHP ехес может быть поучительным: http://au2.php.net/manual/en/function.exec.php