首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在SQL Server中查找调用存储过程

在SQL Server中查找调用存储过程
EN

Stack Overflow用户
提问于 2008-09-29 08:56:14
回答 4查看 34.4K关注 0票数 20

有可能找出是谁调用了存储过程吗?

例如,假设我在proc3中遇到错误。在该进程中,我想知道它是由proc1还是proc2调用的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-29 09:06:29

如果这对您的逻辑很重要,我将使用额外的输入参数来指定源。

这也将使将您的数据库移植到另一个平台变得更容易,因为您不需要依赖于某些与平台相关的模糊函数。

票数 11
EN

Stack Overflow用户

发布于 2008-09-29 09:15:42

您是否需要在运行时在proc3中知道是谁导致了错误,还是只需要在调试时就知道?

如果您只需要在调试/监视期间使用SQL Server profiler,则可以使用它。

否则,在2005年,我不相信你有能力堆叠跟踪。

要解决这个问题,你可以添加额外的参数到proc3,@CallingProc或类似的东西。

或者,您可以向proc1和proc2添加try catch块。

代码语言:javascript
复制
BEGIN TRY
EXEC Proc3
END TRY
BEGIN CATCH
SELECT 'Error Caught'
SELECT
    ERROR_PROCEDURE()
END CATCH

这里有一个很好的参考:http://searchsqlserver.techtarget.com/tip/1,289483,sid87_gci1189087,00.html

当然,总是SQL Server Books Online

但是,SQL Server2008确实能够通过过程进行调试。

票数 3
EN

Stack Overflow用户

发布于 2008-09-29 11:10:00

没有一种很好的自动方法可以做到这一点(可惜)。因此,这真的取决于你准备(重写)多少你的proc,以便能够做到这一点。

如果您有日志记录机制,则可以读取日志并找出是谁呼叫了您。

例如,如果您通过插入到表中来实现日志记录,例如:

代码语言:javascript
复制
CREATE TABLE Log
(timestamp dattime, 
spid       int, 
procname   varchar(255), 
message    varchar(255) )

... text of proc ... 
INSERT INTO Log
SELECT get_date(), @@spid, @currentproc, 'doing something' 
-- you have to define @currentproc in each proc

-- get name of caller
SELECT @caller = procname 
FROM   Log
WHERE  spid = @@spid 
AND    timestamp = (SELECT max(timestamp) 
                    FROM   Log 
                    WHERE  timestamp < get_date() 
                    AND    procname != @currentproc ) 

这对递归调用不起作用,但也许有人可以解决这个问题?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/148004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档