master.dbo.sysprocesses 中的哪一列对于会话来说是唯一的?
我正在创建 SQL 机制(在 MSSQL 2005 中),该机制一次只允许一个用户在某个表中设置字段。如果设置了该字段,则其他人无法清除它(设置为 NULL)。如果不是,则该字段将设置为用户会话特有的内容
。作为一个好的候选人,master.dbo.sysprocesses.sid
正在寻找我,但我不确定。
我需要确保当用户的客户端应用程序(将使用此机制)崩溃时,该字段将被清除,以便其他用户能够使用它。我正在考虑一些清除工作,它将检查设置此字段的用户会话是否处于活动状态,如果不是,则清除它(当然仅当该字段不为空时)。
每个用户会话的 master.dbo.sysprocesses 中是否有一个唯一的列,而无需稍后重复使用相同的值?
非常感谢
I'm creating SQL mechanism (in MSSQL 2005) which allows only one user at time set the field in certain table. If this field is set, no one else can clear it (set to NULL). If not, this field is set to something unique for the user's session
. As a good candidate master.dbo.sysprocesses.sid
looks for me, but I'm not sure with it.
I need to ensure when the user's client application (which will use this mechanism) crashes, the field will be cleared so another users will be able to use it. I'm thinking about some clearing job, which will check if the user's session which set this field is active yet and if not, then clear it (of course only when the field is not NULL).
Is there a unique column in master.dbo.sysprocesses for each user session without reusing the same value later on ?
Thanks a lot
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
spid 识别任何连接/会话。不多也不少。其他会话不会有该 spid。
您可以使用 @@SPID 代替 sysprocesses。
编辑: sid 不是唯一的,因为一个用户可以有多个正在进行的会话。
我认为我们需要更多信息来提供建议。
我担心你的应用程序会经常崩溃,需要这个解决方案来清除这种独占锁定...
Edit2:login_time 根据评论也可以使用
spid identifies any connection/session. No more, no less. No other session will have that spid.
And you can use @@SPID for that instead rather than sysprocesses.
Edit: sid is not unique because a user can have several sessions ongoing.
I reckon we need more info to offer a suggestion.
I am concerned that your app will crash often enough to need this solution to clear such exclusive locking...
Edit2: login_time would be usable too based on comments
spid 并不是唯一的。有时我会在我的服务器上看到 10 个或更多相等的 spid(这是由于并行性而发生的)。
尝试 spid + kpid。
A spid is not unique. Sometimes I see 10 or more equal spids on my server (it happens because of parallelism).
Try spid + kpid.