是否有辦法告訴哪些進程正在調用當前正在執行的存儲過程。T-SQL--被稱爲當前進程
1
A
回答
1
目前沒有辦法做到這一點。
但是請...去here並讓他們知道你想要這個功能。
編輯:
我看着這個多一點,並發現潛在的解決方法(醜用於此目的,但它看起來像它可能是可行的):
這是來自聯機叢書:
- 會話上下文信息存儲在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
這個問題在我研究相同問題時出現在結果列表中,但我發現以下代碼
print object_name(@@PROCID)
它在存儲過程中工作,返回包含它的存儲過程的名稱。原始文章我在sql server central找到。
相關問題
- 1. 當notifyDataSetChanged被稱爲
- 2. Stacktrace/Stackwalk爲當前進程和當前線程與IDebug接口
- 3. TSQL基於當前用戶
- 4. TileService被視爲前臺進程
- 5. 當它被稱爲actionPerformed?
- 6. 程序被稱爲
- 7. 爲什麼線程被稱爲輕量級進程?
- 8. LWJGL - 當前上下文中不可用的函數被稱爲
- 9. 替換當前進程
- 10. Node.js和chrooting當前進程
- 11. C#:找到當前進程
- 12. 十進制在tsql中被截斷
- 13. 如何確定C#中當前重點進程的名稱
- 14. 獲取當前進程中所有句柄的名稱
- 15. 如何檢測當前進程是否被暫停?
- 16. 之前QGraphicsItem ::塗料將被稱爲
- 17. appWillEnterForeground:appDidEnterBackground之前被稱爲:完成
- 18. 爲什麼對當前應用程序的引用稱爲`shared`
- 19. 當onStop實際上被稱爲
- 20. 當的dealloc被稱爲在Objective-C
- 21. 當setQuickDialogTableView被稱爲在quickdialog框
- 22. 的Makefile:當功能被稱爲
- 23. 當節點被稱爲與xargs的
- 24. ret_from_syscall源代碼,當它被稱爲
- 25. 是可以計算當localNotification被稱爲
- 26. 獲取當前課程的名稱?
- 27. DBUnit當前線程被中斷
- 28. 查找進程ID活躍時,進程名稱被賦予
- 29. iMessage當前用戶的名稱爲零
- 30. 當一個進程的當前工作目錄被另一個進程刪除時會發生什麼?
我發佈了一條提示給我的博客,包括源代碼:http://www.thecodepage.com/post/TIP-A-Call-Stack-in-SQL-Server.aspx – 2010-02-03 02:17:15