2009-11-18 19 views
0

Je lance des requêtes en utilisant l'utilitaire SQLCMD via PHP et je voulais savoir s'il y avait un moyen d'arrêter les requêtes ou scripts que j'ai exécutés via une autre commande SQL.SQL Server: Arrêt des requêtes en externe

Je fais également usage du pilote PHP pour SQL Server serait-il plus facile de faire de cette façon?

Ou n'est-ce pas possible - une fois qu'une requête s'exécute, vous ne pouvez pas l'arrêter?

Merci à tous

Répondre

3

SQL Server conserve la trace de tous les processus d'exécution. Vous pouvez consulter la liste en utilisant les procédures stockées SP_WHO et SP_WHO2 - chaque processus a un SPID unique.

Dans le passé, j'ai copié et personnalisé le code derrière ces procédures à mes propres fins.

Vous pouvez vérifier la requête dernière exécutée sur un SPID en utilisant DBCC INPUTBUFFER (@SPID)

Vous pouvez tuer la plupart des processus en utilisant KILL @SPID

Prenez note qu'il est généralement pas considéré comme une bonne idée de tuer des processus parce que vous ne pouvez pas être sûr de ce qu'ils font exactement.

+0

Ah, je vois. Les commandes que j'exécute sont celles que je cours et parfois elles doivent être détruites et la base de données vient de se vider, donc c'est ok je suppose dans ce cas! – Abs

0

dépend comment vous appelez que SQLCMD. L'exécutez-vous comme un appel à exec()? Les commandes PHP ne vous donnent pas beaucoup de contrôle.

Si vous faites quelque chose qui prend du temps, il pourrait être préférable d'utiliser une architecture Producer-Consumer. Demandez à votre programme principal de publier (dans une base de données ou dans un fichier texte) la commande à exécuter. Avoir un processus séparé (un autre script PHP, peut-être) exécuter cette commande - mais avant qu'il ne démarre le SQLCMD, qu'il fournisse son ID de processus (ou un autre handle) au programme principal. Puis, dans votre programme principal, vous pouvez tuer le processus engendré si cela prend trop de temps.

Certains des commentaires sur la fonction exec PHP peut être instructif: http://au2.php.net/manual/en/function.exec.php