【发布时间】: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