【问题标题】:sp_getApplock lockOwner values transaction vs sessionsp_getApplock lockOwner 值事务与会话
【发布时间】:2014-11-24 12:14:05
【问题描述】:

我的存储过程需要一次运行一个(不应该同时运行)。

为此,我使用下面的存储过程

exec @result = sys.sp_getapplock 
@Resource='Employee', @LockMode = 'Exclusive', @LockOwner= 'session', @LockTimeout = 0

在该调用中,LockOwner 设置为“session”,还有另一个可能的值称为“transaction”。

我知道,如果我要选择事务,我需要在事务中写入存储的 proc 主体。

我搜索了两者之间的差异,但没有得到任何运气。

除了在事务中调用 sp_getapplock 之外,任何人都可以帮我解决它们之间的区别吗?

我还将感谢解决我的问题的任何最佳实践(防止正在运行的存储过程同时执行。)

【问题讨论】:

  • 澄清一下,为什么要将存储过程的执行限制为一次?当多个用户想要做同样的事情时会发生什么?锁的目的是什么,防止什么?
  • @BerndLinde 我需要创建并分配一个由两部分组成的唯一随机数 1) 是随机部分,2) 是顺序部分(例如 ABD001、CDE002、DFD003 ....)。存储过程的目的是生成这个随机数。

标签: sql stored-procedures


【解决方案1】:

我认为SEQUENCE 对象可能比 applock 解决方案更适合您。它有点像没有表的标识列,允许您以线程安全的方式生成随机数的顺序部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多