首页 > 解决方案 > SQL Server 查询以显示当前会话的最后活动时间

问题描述

后端:SQL Server 2017 Express

前端:Microsoft Access 2019 与 SQL Server 数据库的 ODBC 链接表

目标:检测当前会话中 30 分钟的不活动状态,然后退出 Access

我想要一个 SQL Server 查询(通过计时器从前端 Access 数据库调用),它将返回当前会话的最后一个 SQL 语句(例如 select/insert/update/delete)的日期/时间,以便 Access 应用程序可以在定义的不活动时间段后退出。

到目前为止,我已经查看了 sp_who、sp_who2、sysprocesses、dm_exec_connections、dm_db_index_usage_stats 和 dm_exec_sessions。

虽然这些返回看起来很有用的列,例如 LastBatch,但问题是查询数据库的行为会更新返回值。例如,如果我运行 sp_who2 并查看我的 SPID 的行,LastBatch 的值始终与 GetDate() 相同。

我知道如果我正在监视另一个会话(SPID),上面的选项会起作用,但我正在寻找一种方法来查找我自己的会话的上次活动时间(不包括 sp_who2 等)。

有什么建议么?

标签: sqlsql-serverms-accesssession

解决方案


您是正确的,最后请求时间是请求请求最后请求时间的时间。(必须这样写。)也许您应该检测 Access 是否空闲?搜索“如果空闲则自动关闭访问”有可喜的结果。

https://docs.microsoft.com/en-us/office/vba/access/concepts/miscellaneous/detect-user-idle-time-or-inactivity

https://www.iaccessworld.com/set-program-close-automatically/

https://www.tek-tips.com/faqs.cfm?fid=1432

如果您绝对必须在 SQL Server 中进行检查,那么可能需要检查连接。如果连接空闲一段时间而没有打开的事务,它可以终止连接。我不知道访问连接是否显而易见,因为并非所有应用程序都提供它们的名称。我也不知道访问前端会如何响应。我对这样做持怀疑态度。


推荐阅读