如何获取当前连接的sysprocesses.program_name

时间:2017-03-24 11:25:36

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

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

换句话说,我想加入sysprocesses加入此

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

但我没有成功。

只是解释一下背景:

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

我正在通过仅使用触发器来伪装遗留应用程序(它是"紧急维护")。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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