1

我正在创建 SQL 机制(在 MSSQL 2005 中),该机制一次只允许一个用户在某个表中设置字段。如果设置了此字段,则其他人无法清除它(设置为 NULL)。如果不是,则此字段设置为something unique for the user's session。作为一个好的候选人master.dbo.sysprocesses.sid寻找我,但我不确定。

我需要确保当用户的客户端应用程序(将使用此机制)崩溃时,该字段将被清除,以便其他用户能够使用它。我正在考虑一些清除工作,它将检查设置此字段的用户会话是否处于活动状态,如果没有,则清除它(当然只有当该字段不为 NULL 时)。

每个用户会话的 master.dbo.sysprocesses 中是否有一个唯一列,而以后不重用相同的值?

非常感谢

4

2 回答 2

1

spid 标识任何连接/会话。不多也不少。没有其他会话将具有该 spid。

您可以使用@@SPID而不是 sysprocesses。

编辑: sid 不是唯一的,因为用户可以进行多个会话。

我认为我们需要更多信息来提供建议。

我担心您的应用程序会经常崩溃,以至于需要此解决方案来清除此类独占锁定...

Edit2:login_time 也可以根据评论使用

于 2011-05-04T11:03:36.943 回答
0

spid 不是唯一的。有时我会在我的服务器上看到 10 个或更多相等的 spid(这是因为并行性而发生的)。

尝试 spid + kpid。

于 2013-01-24T18:02:33.210 回答