2012-07-17 60 views
4

我正在實現內部沒有事務的存儲過程。實際上,它只會在特定的地點將時間縮短到最低限度。存儲過程的本質是,所以我只需要一次runinng。沒有事務的sp_getapplock

我試圖使用sp_getapplock,但很快發現它需要在事務中。

是否有其他的選擇,我可以鎖定整個程序,但沒有將其包含在事務中?

回答

8

通過@LockOwner傳遞Session以獲得會話範圍鎖定;這並不需要一個事務在鎖定時處於活動狀態。

例如

EXEC @res = sp_getapplock @Resource = 'Lock ID', @LockOwner = 'Session', @LockMode = 'Exclusive'; 
.. 
code 
.. 

EXEC @res = sp_releaseapplock @Resource = 'Lock ID'; 
+0

不知道你的意思,你能張貼的例子嗎? – katit 2012-07-17 23:38:14

+0

@katit,完成,見上面 – iruvar 2012-07-17 23:57:01

+1

是的,這工作!將'@LockOwner ='Session''也添加到sp_releaseapplock中,否則會拋出錯誤 – katit 2012-07-18 00:03:50