【问题标题】:What column from master.dbo.sysprocesses is unique for the session?master.dbo.sysprocesses 中的哪一列对于会话是唯一的?
【发布时间】:2011-05-04 10:31:31
【问题描述】:

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

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

ma​​ster.dbo.sysprocesses 中是否有每个用户会话的唯一列,以后无需重复使用相同的值?

非常感谢

【问题讨论】:

    标签: sql-server sql-server-2005 session unique system-databases


    【解决方案1】:

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

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

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

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

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

    Edit2:login_time 也可以基于 cmets 使用

    【讨论】:

    • 感谢您的回答,但我不能将其用于我的目的。有一些会话(已经终止)的 SPID 可以稍后再获得一个,所以我的清理工作无法识别是我还是之前的会话。
    • 问题是它不是我的应用程序,我只是为它编写扩展插件。对于崩溃,我的意思是托管应用程序在发生连接问题时会自行关闭(这有时会发生,因为某些主机使用 wi-fi)。而且我需要确保这些锁用于独占记录修改。因此,对于该数据库作业,我需要为每个会话设置一些唯一值,而无需重复使用。
    • 我知道了,我可以使用login_time,这似乎是该表中唯一唯一的不可重复会话标识符。如果你修改你的答案我会接受,我不会接受我自己的答案:)
    【解决方案2】:

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

    试试 spid + kpid。

    【讨论】:

      猜你喜欢
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2016-08-12
      • 2010-10-23
      • 2015-01-12
      • 2021-01-26
      • 1970-01-01
      相关资源
      最近更新 更多