2009-12-31 37 views

回答

1

目前没有办法做到这一点。

但是请...去here并让他们知道你想要这个功能。

编辑:

我看着这个多一点,并发现潜在的解决方法(丑用于此目的,但它看起来像它可能是可行的):

SET CONTEXT_INFO

这是来自联机丛书:

  • 会话上下文信息存储在master.dbo.sysprocesses表的context_info列中。这是一个varbinary(128)列。
  • SET CONTEXT_INFO不能在用户定义的函数中指定。您不能向SET CONTEXT_INFO提供空值,因为sysprocesses表不允许空值。
  • SET CONTEXT_INFO不接受常量或变量名以外的表达式。要将上下文信息设置为函数调用的结果,您必须首先将函数调用结果放在二进制或varbinary变量中。
  • 当您在存储过程或触发器中发出SET CONTEXT_INFO时,与其他SET语句不同,在存储过程或触发器完成后,为上下文信息设置的新值仍然存在。

因此,这里是我的想法:

将此代码添加到您的所有程序:

DECLARE @UID VARBINARY(128) 
SELECT @UID = CAST('ThisProcedureName' AS VARBINARY(128)) 
SET CONTEXT_INFO @UID 

然后添加这个检查在你需要它:

DECLARE @Message varbinary(128) 
SELECT @Message = cast('TestB' as varbinary(128)) 

IF (@Message = CONTEXT_INFO()) BEGIN 
    RAISERROR('Not Allowed unless from procedure XX', 16, 1) 
END 
+0

我发布了一条提示给我的博客,包括源代码:http://www.thecodepage.com/post/TIP-A-Call-Stack-in-SQL-Server.aspx – 2010-02-03 02:17:15

0

这个问题在我研究相同问题时出现在结果列表中,但我发现以下代码

print object_name(@@PROCID) 

它在存储过程中工作,返回包含它的存储过程的名称。原始文章我在sql server central找到。