2011-07-30 58 views
2

sp_getapplock MSDN文檔說:當使用sp_getapplock時,@Resource應該指什麼?

[@資源=] 'RESOURCE_NAME' 是指定一個名稱 標識鎖資源的字符串。

由sp_getapplock創建的鎖資源在當前數據庫中爲 會話創建。每個鎖資源由以下組合值標識:

  • 包含鎖資源的數據庫的數據庫ID。
  • @DbPrincipal參數中指定的數據庫原理。
  • @Resource參數中指定的鎖定名稱。

我的問題:
1.是 'RESOURCE_NAME' 只是你彌補任何舊的名字嗎?
2.「resource_name」是否必須引用表名或存儲的proc名稱或(指定的)事務名稱?

回答

2

是的,它是你製作的任何舊名稱。你可以說「sp_getapplock'kitten'」,它會等待「kitten」鎖被釋放,然後再獲取它自己並繼續。你必須定義有意義的資源來序列化訪問。

我不喜歡在表後命名鎖的想法,因爲這意味着其他編碼人員在SQL Server中沒有任何內容(除了applock框架)對該表進行序列化時,就會對該表進行序列化。換句話說,applocks就像交通燈。沒有什麼固有的紅燈可以阻止你前進。這不是一個好主意。

+0

後續行動的一點:(1)是否有堅持的最佳做法? (2)是否存在需要或想要在t-sql代碼中引用「小貓」的情況,還是在調用sp_getapplock時唯一重要的時刻? – mg1075

+1

我不知道任何有關sp_getapplock的最佳做法。我知道我從未在生產代碼中看到過它。儘管如此,我可以想象任何你能找到的有關信號量的東西都適用於此。至於你使用的鎖的名字,我認爲它不在sp_getapplock(和關聯的sp_releaseapplock,當然)之外。 –

+0

「......從未在生產代碼中看到它」。很高興知道。我想知道是因爲Remus的迴應在這裏:http://stackoverflow.com/questions/6880588/managing-synonyms-in-a-proc-with-nested-procs-using-sp-getapplock當我嘗試實現它,它給我造成了鎖,似乎打敗了我希望能夠完成的全部目的。 http://stackoverflow.com/questions/6853327/keep-table-downtime-to-a-minimum-by-renaming-old-table-then-filling-a-new-versio – mg1075

相關問題