是否有辦法告訴哪些進程正在調用當前正在執行的存儲過程。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. TSQL基於當前用戶
- 3. TileService被視爲前臺進程
- 4. 爲什麼線程被稱爲輕量級進程?
- 5. LWJGL - 當前上下文中不可用的函數被稱爲
- 6. C#:找到當前進程
- 7. Node.js和chrooting當前進程
- 8. 十進制在tsql中被截斷
- 9. 獲取當前進程中所有句柄的名稱
- 10. 如何確定C#中當前重點進程的名稱
- 11. 之前QGraphicsItem ::塗料將被稱爲
- 12. 爲什麼對當前應用程序的引用稱爲`shared`
- 13. 當setQuickDialogTableView被稱爲在quickdialog框
- 14. 是可以計算當localNotification被稱爲
- 15. ret_from_syscall源代碼,當它被稱爲
- 16. 當的dealloc被稱爲在Objective-C
- 17. 的Makefile:當功能被稱爲
- 18. 當節點被稱爲與xargs的
- 19. iMessage當前用戶的名稱爲零
- 20. 如何確定進程是否爲當前活動/前臺應用程序
- 21. TSQL Synoym爲數據庫名稱
- 22. 被稱爲
- 23. copyWithZone被稱爲
- 24. 如何從管理進程作爲當前用戶權限運行進程
- 25. 如何確定當前運行的進程是否爲父進程?
- 26. 當父進程被「kill -9」殺死時,子進程是否也會被殺死?
- 27. 函數來獲取當前進程UNIX
- 28. 運行PHP進程的當前活動
- 29. linux-kernel中進程的當前目錄
- 30. 不能殺死當前進程android
我發佈了一條提示給我的博客,包括源代碼:http://www.thecodepage.com/post/TIP-A-Call-Stack-in-SQL-Server.aspx – 2010-02-03 02:17:15