master.dbo.sysprocesses中的哪一列对于会话是唯一的?
-
28-10-2019 - |
题
我正在创建SQL机制(在MSSQL 2005中),该机制仅允许一个用户同时在某些表中设置字段。如果设置了此字段,则没有其他人可以清除它(设置为NULL)。如果不是,则此字段设置为something unique for the user's session
。作为一个不错的候选人,master.dbo.sysprocesses.sid
会寻找我,但是我不确定。
我需要确保当用户的客户端应用程序(将使用该机制)崩溃时,该字段将被清除,以便其他用户可以使用它。我正在考虑进行一些清除作业,该作业将检查设置该字段的用户会话是否处于活动状态,如果没有,则将其清除(当然,仅当该字段不为NULL时)。
master.dbo.sysprocesses中是否为每个用户会话创建了一个唯一的列,而以后不会重复使用相同的值?
非常感谢
解决方案
spid标识任何连接/会话。不多不少。没有其他会话将具有该spid。
您可以使用 @@ SPID 代替sysprocesses。
编辑:sid不是唯一的,因为用户可以进行多个会话。
我认为我们需要更多信息以提出建议。
我担心您的应用会经常崩溃,因此需要此解决方案来清除此类独占锁定...
Edit2:基于注释,login_time也将可用
其他提示
spid不是唯一的。有时我在服务器上看到10个或更多相等的spid(由于并行性而发生)。
尝试使用spid + kpid。
不隶属于 StackOverflow