2011-01-07 78 views
3

如何在SQL Server 2005中的行鎖我執行了行鎖定一個sql,這是SQL Server行鎖定

SELECT * 
FROM authors 
WITH (HOLDLOCK, ROWLOCK) 
WHERE au_id = '274-80-9391' 

它工作得很好,但在這種情況下,行是不是選擇更新鎖。我只想知道如何鎖定行,因爲在SQL Server中發出SQL時,其他用戶無法看到該行。請指導我。謝謝

+1

我不知道你想達到什麼樣的效果。 – 2011-01-07 07:38:42

回答

2

您不能隱藏一行,以便它不會被其他SQL查詢看到。如果您打開一個事務,鎖定一行並保持打開該事務,則可以導致其他SQL查詢阻止等待事務結束並清除鎖定。但是,如果查詢以不同的事務隔離級別運行(例如:讀取未提交),則它們將繞過鎖並仍然可以看到該行的值。

1

如果您想跳過被鎖定的行,可以使用SQL Server中的READPAST提示。這需要在正在讀取鎖定行的查詢上指定,而不是鎖定它們的查詢。來自聯機叢書:

指定數據庫引擎不讀取被其他事務鎖定的行。當指定READPAST時,跳過行級鎖定 。

具有READPAST提示的SELECT語句將返回所有非鎖定的行並跳過鎖定的行。