PHP経由でSQLCMDユーティリティを使用してクエリを実行していますが、プロセスIDなどを渡すことで、別のSQLコマンドを介して実行したクエリまたはスクリプトを停止する方法があるかどうかを知りたいと思いました。
また、PHP Driver for SQL Server を使用しています。この方法は簡単ですか?
それとも、これは不可能ですか - クエリが実行されると、それを停止することはできませんか?
皆さんありがとう
PHP経由でSQLCMDユーティリティを使用してクエリを実行していますが、プロセスIDなどを渡すことで、別のSQLコマンドを介して実行したクエリまたはスクリプトを停止する方法があるかどうかを知りたいと思いました。
また、PHP Driver for SQL Server を使用しています。この方法は簡単ですか?
それとも、これは不可能ですか - クエリが実行されると、それを停止することはできませんか?
皆さんありがとう
SQL Server は、実行中のすべてのプロセスを追跡します。SP_WHO
ストアド プロシージャを使用してリストを確認できます。SP_WHO2
各プロセスには固有のSPID
.
過去に、これらの手順の背後にあるコードを自分の目的のためにコピーしてカスタマイズしました。
SPID
を使用して最後に実行されたクエリを確認できますDBCC INPUTBUFFER (@SPID)
を使用してほとんどのプロセスを強制終了できますKILL @SPID
プロセスが何をしているのか正確にわからない可能性があるため、プロセスを強制終了することは一般的には良い考えではないことに注意してください。
その SQLCMD の呼び出し方法によって異なります。exec() の呼び出しとして実行していますか? PHP コマンドでは、多くの制御はできません。
時間がかかる作業をしている場合は、Producer-Consumer アーキテクチャを使用することをお勧めします。メイン プログラムで、実行するコマンドを (データベースまたはテキスト ファイルに) 公開します。別のプロセス (おそらく別の PHP スクリプト) でそのコマンドを実行しますが、SQLCMD を開始する前に、そのプロセス ID (または他のハンドル) をメイン プログラムに提供します。
次に、メイン プログラムで、生成されたプロセスに時間がかかりすぎる場合は、そのプロセスを強制終了できます。
PHP exec 関数に関するコメントのいくつかは、参考になるかもしれません: http://au2.php.net/manual/en/function.exec.php