【问题标题】:How to get sysprocesses.program_name for current connection如何获取当前连接的 sysprocesses.program_name
【发布时间】:2017-08-17 07:42:48
【问题描述】:

我需要为当前连接检索sysprocesses.program_name 的值。我使用的是 Sql Server 2008R2。

换句话说我想加入sysprocesses这个

select * from sys.dm_exec_connections
where session_id = @@SPID

但我没有成功。

只是为了解释上下文:

我需要知道当前会话的program_name,因为我正在处理的应用程序会写入有关谁登录到系统的信息(它不依赖于 sql server 用户,因为sa 用于连接)进入program_name(这是一个技巧)。 如果我能阅读program_name,我将能够在我正在编写的INSTEAD OF UPDATE 触发器中实现一些自定义逻辑。

我正在通过仅处理触发器来调整遗留应用程序(它是“紧急维护”)。

【问题讨论】:

    标签: sql-server sql-server-2008-r2 database-connection


    【解决方案1】:

    Ant_22:是的,如果您在连接字符串中添加“应用程序名称”,您可以看到应用程序名称,例如查看每个进程的连接数:

    SELECT 
        DB_NAME(dbid) as DBName, 
        COUNT(dbid) as NumberOfConnections,
        PROGRAM_NAME as ProgName,
        loginame as LoginName
    FROM
        sys.sysprocesses
    WHERE 
        dbid > 0 
    GROUP BY 
        dbid, PROGRAM_NAME, loginame
    

    【讨论】:

      【解决方案2】:

      使用this builtin function:

          select app_name()
      

      或者,您可以使用此查询来获取更多的程序名称:

          select  *
          from    sys.[dm_exec_connections] as [dec]
                  inner join [sys].[sysprocesses] as [sp] on [dec].[session_id] = [sp].[spid]
          where   [dec].[session_id] = @@SPID
      

      【讨论】:

      • 内置函数更好,事实上它是我唯一需要的。谢谢!
      • 您是否 100% 确定 sysprocesses.program_name 等于给定连接的 APP_NAME() 的返回值?这有什么证据吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 2012-05-11
      相关资源
      最近更新 更多