我正在创建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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top