2009-12-31 46 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找到。