【问题标题】:Get application name that executes specific stored procedure获取执行特定存储过程的应用程序名称
【发布时间】:2019-07-04 10:35:55
【问题描述】:

我想知道执行特定存储过程的应用程序名称。我们有许多应用程序,并且在连接字符串中都有应用程序名称属性。

这里我不知道是哪个应用程序调用了那个存储过程。我想我们可以通过调用APP_NAME() 来获取此信息,但我不知道获取正确应用程序名称的确切查询。

SELECT APP_NAME() 

【问题讨论】:

  • 这将是获取当前连接的应用程序名称的查询; 如果应用程序在其连接字符串中传递了它的名称。如果没有,那么信息将不可用。如果是这种情况,您需要确保更改应用程序代码以确保应用程序的名称包含在连接字符串中。以上内容没有按您的预期工作怎么办(除了先前的警告)?
  • 您可以尝试使用 SQL Server Profiler 来捕获过程调用。它包含应用程序名称信息。 docs.microsoft.com/en-us/sql/tools/sql-server-profiler/…

标签: asp.net sql-server asp.net-mvc


【解决方案1】:

APP_NAME() 是一个内置函数,用于从用于设置当前会话的连接字符串中返回“应用程序名称”令牌。

这是一篇关于正确设置连接字符串的好文章: http://www.sqlerudition.com/using-a-meaningful-application-name-in-the-oledb-connection-string/

如果您无法控制连接字符串,那么您将需要使用其他会话变量的组合,例如 SESSION_USER() 或 @@SPID,并可能参考名为 sys.dm_exec_sessions 的 dmv 以获得完整记录服务器“知道”连接的内容。

https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-sessions-transact-sql?view=sql-server-2017

【讨论】:

  • 应用程序名称已经存在于连接字符串中,只是想知道我们如何从调用 sp 的 sql server 查询中获取应用程序名称。
  • 你可以让分析器在application name上运行一段时间,然后检查结果
【解决方案2】:

如果您想了解详细信息,我建议您通过选择rpc_completed 事件来使用扩展事件。 For detailed steps..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2015-06-07
    • 2018-09-15
    • 2012-07-28
    • 2023-04-08
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多