SQL Server: Arrêter les requêtes Extérieurement
-
20-09-2019 - |
Question
Je lance des requêtes à l'aide de l'utilitaire SQLCMD via PHP et je voulais savoir s'il y avait un moyen d'arrêter des requêtes ou des scripts que je l'ai exécuté par une autre commande SQL en passant l'ID de processus ou quelque chose.
Je fais également l'utilisation du pilote PHP pour SQL Server serait-il plus facile de le faire de cette façon?
Ou est rien de tout cela possible - une fois par requête, vous ne pouvez pas court arrêter
?Merci à tous
La solution
SQL Server conserve la trace de tous les processus d'exécution. Vous pouvez consulter la liste en utilisant des procédures stockées SP_WHO
et SP_WHO2
-. Chaque processus a une SPID
unique,
Dans le passé, je l'ai copié et personnalisé le code derrière ces procédures pour 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 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 exactement ce qu'ils font.
Autres conseils
Cela dépend comment vous appelez que SQLCMD. Courez-vous comme un appel à exec ()? Les commandes PHP ne vous donnent pas beaucoup de contrôle.
Si vous faites quelque chose de temps, il pourrait être préférable d'utiliser une architecture producteur-consommateur. Demandez à votre programme principal publier (à une base de données ou un fichier texte) la commande à exécuter. Avoir un processus distinct (un autre script PHP, peut-être) exécuter cette commande -. Mais avant qu'il ne commence la SQLCMD, avoir fournir son numéro d'identification de processus (ou une autre poignée) au programme principal
Ensuite, dans votre programme principal, vous pouvez tuer le processus donné naissance si elle prend trop de temps.
pourrait être instructif Certains des commentaires sur la fonction exec PHP: http: //au2.php.net/manual/en/function.exec.php