Si PROC A exécute procbb, existe-t-il un moyen de rechercher que cela a été appelé par un paramètre au lieu d'avoir un paramètre où un passe B son ID? P>
par demande: la raison pour laquelle je suis intéressé est multiplié 1) Connaissance générale, je suis sûr que si cela peut être fait, cela impliquerait une utilisation intelligente de certaines tables / variables système pouvant m'aider à faire d'autres choses sur la route. P>
2) Comme d'autres personnes ont mentionné, journalisation / audit. J'aimerais faire une procédure qui enregistre une entrée de début, de fin et de message qui ne nécessite aucun paramètre et accepte un paramètre facultatif d'un message spécifié par l'utilisateur. Cela permettrait de simplement laisser tomber un EXED en haut et en bas d'un processus pour le faire fonctionner et que la procédure d'audit comprimait le reste par elle-même. P>
Je sais que ces informations sont disponibles dans les fichiers journaux, mais l'analyse des personnes et les donner aux utilisateurs n'est pas tout ce qui est simple, alors que cela donnerait un accès facile à ces informations de base. P>
3) Utilisé conjointement avec un sémaphore Une telle procédure généralisée pourrait garantir que les processus associés ne sont pas exécutés simultanément quelles que soient des sessions / transactions, etc. P>
5 Réponses :
Pourquoi voudriez-vous faire cela?
AFAIK, il n'y a aucun moyen de savoir qui l'a appelé. P>
Edit: Au moment où KM montre qu'il est possible (conformément au code), je suis intéressé à comprendre la raison derrière cela. Pouvez-vous poster cela aussi, en l'ajoutant à votre question? P>
J'ai déjà fait cela avant d'aider à enregistrer les événements. Dans des procédures importantes / problématiques, je continue à ajouter une information utile sur un Varcharne (8000) Varibale à mesure que la procédure fait diverses choses. Lorsqu'il y a une erreur, je retourne et insérez cette chaîne dans une table de journaux, qui y a beaucoup d'informations utiles. Parfois, savoir qui appelé la procédure aide et peut être enregistré avec les autres informations ...
J'ai pensé ainsi. Identique à StackTrace pour la procédure stockée. Merci km.
Je ne nid pas la procédure appelle tout ce qui profonde. J'ai utilisé cette technique pour suivre une procédure appelée à partir de nombreux endroits. C'est une chose de savoir que vous avez de mauvais paramètres, et une autre de savoir où ils viennent de
Existe-t-il en quelque sorte dans SQL pour obtenir la liste des déclarations exécutées (la manière dont le profileur le voit)?
Je ne sais pas, mais il est possible de déboguer dans une procédure stockée.
Si une procédure stockée doit se comporter différemment sur la base de qui l'appelle, il doit alors ajouter un paramètre. De cette façon, si vous ajoutez une procédure stockée "Z", le code fonctionnera toujours - "Z" peut transmettre le paramètre de la manière dont "C" le passa, ou la façon dont "D" le passa. Si cela n'est pas assez bon, la nouvelle logique doit être ajoutée dans "B". P>
Non, cela ne peut pas dire quel processus l'appelait. Vous auriez besoin d'ajouter un paramètre supplémentaire pour le dire à qui l'appelant est p>
Il pourrait y avoir un code extrêmement convoluté que vous pourriez écrire qui frappe les vues du système, le suivi et l'analyse des piles d'appel ... mais je ne sais pas que les informations sont là, ou si cela vaut la peine d'être effort.
Utilisez un praramètre comme celui-ci: et cette ... p>
dans MSSQL Server 2008 Vous pouvez utiliser SYS.DM_EXEC_PROCEDURES_STATS, cette vue de gestion dynamique peut vous indiquer lors de la procédure stockée (voir aussi Sys.Procedures pour obtenir le nom de la procédure) a été exécutée et ainsi de suite.
SELECT s.*, d.* FROM sys.procedures s INNER JOIN sys.dm_exec_procedure_stats d ON s.object_id = d.object_id ORDER BY [d.last_execution_time] DESC;