Découvrez la procédure stockée appelant dans SQL Server
Est-il possible de savoir qui appelle une procédure stockée?
Par exemple, dire que j'ai une erreur dans proc3
. Depuis l'intérieur de la proc je veux savoir si il a été appelé par proc1
ou proc2
.
source d'informationauteur Craig HB | 2008-09-29
Vous devez vous connecter pour publier un commentaire.
Je voudrais utiliser un paramètre d'entrée, de préciser la source, si cela est important pour votre logique.
Ce sera aussi plus facile de port de votre base de données vers une autre plate-forme, puisque vous n'avez pas à compter sur quelque obscure dépendants de la plateforme de la fonction.
Avez-vous besoin de connaître dans proc3 au moment de l'exécution qui a causé l'erreur, ou avez-vous juste besoin de savoir tout de débogage?
Vous pouvez utiliser Générateur de profils SQL Server si vous avez seulement besoin de le faire pendant le débogage/surveillance.
Sinon, en 2005, je ne crois pas que vous avez la capacité de trace de la pile.
De travailler autour d'elle, vous pouvez ajouter et paramètre supplémentaire à proc3, @CallingProc ou quelque chose comme ça.
OU vous pouvez ajouter des blocs try catch pour proc1 et proc2.
Bonne référence ici : http://searchsqlserver.techtarget.com/tip/1,289483,sid87_gci1189087,00.html
et bien sûr toujours SQL Server Books Online
SQL Server 2008 n'ont la possibilité de déboguer le biais de procédures toutefois.
Il n'y a pas de belle manière automatique pour ce faire (hélas). Donc, cela dépend vraiment de combien vous êtes prêt à (ré)écrire votre procs afin d'être en mesure de le faire.
Si vous avez un mécanisme de journalisation, vous pourriez être en mesure de lire le journal et de savoir qui vous a appelé.
Par exemple, si vous mettez en place la journalisation à l'insertion d'une table, par exemple:
Cela ne fonctionne pas pour les appels récursifs, mais peut-être quelqu'un peut résoudre ce problème?
Vous pourriez avoir proc1 et proc2 passer leurs noms dans l'proc3 en tant que paramètre.
Par exemple: