如何通过sqlcmd

时间:2018-07-03 07:22:01

标签: sql-server session detect sqlcmd tempdb

我想在重新启动实例之前获得活动的用户会话计数,不包括任何后台会话。

我只是想使用以下查询,但是我不确定如何通过SQL Server排除tempdb的选择会话。

从sys.dm_exec_requests中选择COUNT(*)个session_id(从sys.dm_exec_sessions中选择session_id,其中status =“正在运行”)

任何建议将再次受到赞赏。

2 个答案:

答案 0 :(得分:0)

如果您只需要活动的用户会话,而排除tempdb的会话

尝试一下

select count(*) FROM sys.dm_exec_requests 
where 
    database_id <> DB_ID('tempdb') 
    and 
    session_id in 
        (select session_id from sys.dm_exec_sessions where is_user_process = 1 and status='running')

答案 1 :(得分:0)

非常感谢您的迅速答复,德米特里(Dmitry):我可以如下实现:

set StrSQL =“ SET NoCount ON;从sys.dm_exec_requests中选择COUNT(*),在其中database_id <> DB_ID('tempdb')和session_id中(从sys.dm_exec_sessions中选择session_id,其中is_user_process = 1并且status ='running'和session_id <> @@ spid)“
为('sqlcmd -Q%StrSQL%%CONN_PARAM%')中的/ F %% A设置USER_SESSION_CNT = %% A
回显当前用户会话Cnt:%USER_SESSION_CNT%

如果%USER_SESSION_CNT%gtr 0转到WARNING_USER_SESSION

然后,跳过重新启动任务。非常感谢您的支持。