Создаём запрос на языке SQL, чтобы узнать информацию об активных подключениях к MSSQL серверу
SELECT db_name(dbid) as 'Имя БД', count(dbid) as 'Кол-во подключений', loginame as 'Имя входа SQL Server', hostname AS 'Имя рабочей станции' FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid, loginame, hostname
Данный запрос будет успешно выполняться и на SQL Server версии 2005 - 2012. В запросе sys.sysprocesses - системная таблица SQL Server 2000. Если Вы используете SQL Server 2005 или старше, то рекомендуется использовать системные представления SQL Server. Ниже приведен пример запроса, в котором используется системное представление sys.dm_exec_sessions реализованное в SQL Server 2008 R2.
SELECT db_name(session_id) AS 'Имя БД', login_name AS 'Имя входа SQL Server', host_name AS 'Имя рабочей станции', login_time AS 'Время подключения сеанса', COUNT(session_id) AS 'Кол-во подключений', last_request_end_time AS 'Время завершения последнего запроса' FROM sys.dm_exec_sessions GROUP BY session_id, login_name, host_name, login_time, last_request_end_time
В функцию db_name(session_id) в качестве параметра передается не идентификатор базы данных, а идентификатор сеанса, связанный со всеми активными первичными соединениями. Что приятно, функция возвращает имя базы данных, которая связана с подключением. В SQL Server 2012 в представлении sys.dm_exec_sessions добавлено новое поле database_id - идентификатор текущей базы данных для каждого сеанса.
Представленный алгоритм написания запросов можно использовать при определении активных подключений к серверу в системе TDMS.