2011-01-10 114 views
1

想,如果我明確地通過SQL鎖定一排像如何檢測一行是否被鎖定在sql server表中?

BEGIN TRANSACTION 
select * from bbajobs WITH (ROWLOCK, UPDLOCK) where JID=40970 

那麼我怎麼能檢測到該行被鎖定,其JID是40970?

我搜索谷歌,發現一些解決方案,但那些不起作用。請幫我檢測行是否被鎖定。謝謝。

+0

或許,如果你提到你已經嘗試瞭解決方案,這將有助於表,爲什麼他們沒有工作*你*。儘管谷歌可能出現不同的堆積,但寫得很好的文章通常都是正確的,因此在第一個障礙中丟棄他們的建議可能不是最理想的。 – 2011-01-10 13:04:29

+0

你打算如何使用這些信息?就我所知,這是不可能的,所以如果我們知道你實際想要達到的目標,我們可能會更好地幫助你。 – 2011-01-10 13:39:38

回答

2

也許可以使用像sys.dm_tran_locks這樣的系統視圖,但通常在頁面上找到鎖定而不是單個行,那麼如果可行的話,查找特定行是否被鎖定會很痛苦。

鎖定模型通常應用程序中執行(無論是在一個集中的應用程序服務器或鎖表中的內存管理,如果你有獨立的客戶端程序)

0

使用NOLOCKREADPAST鎖提示。例如。假設你有一個地方的主鍵被稱爲標識

SELECT [Id] FROM [dbo].[TableName] WITH(NOLOCK) 
WHERE [Id] NOT IN 
(
    SELECT [Id] FROM [dbo].[TableName] WITH(READPAST) 
)