這是Is it possible to force row level locking in SQL Server?的擴展。這裏是用例我需要行級鎖定
我有賬號表有賬號,餘額等。這張表正被許多應用程序使用。當我修改某個帳戶時,其他人正在修改另一個帳戶。所以預期的行爲是我會鎖定我的賬戶(ROW),另一個使用會鎖定他(另一個ROW)。
但SQL Server 2008 R2將此鎖定升級爲page/table,第二個用戶獲取超時異常。我已經嘗試了所引用問題中提到的所有解決方案,但沒有任何工作。
如何強制SQL Server鎖定行級鎖或者如何修改此模型以便與頁/表鎖定配合使用?
編輯 更新是通過其PK針對單個記錄,並將其編入索引,以便只有一行被更新/鎖定,這一過程需要不超過一分鐘
更多修改 現在看起來奇怪的事情正在發生。我正在爲打開多個連接的DAL使用ORM庫,並且我已經向他們的支持提出了問題。但是,爲了測試目的,我打開了兩個會話查詢工具,並確實如下
Session # 1
begin tran
UPDATE myTable SET COL_1 = COL_1 WHERE COL_1 = 101;
Session # 2
SELECT COL_1 FROM myTable WHERE COL_1 = 101;
會話#2中的查詢超時了!其他值爲COL_1
的查詢正在正常工作。現在看起來,如果同一記錄在另一個會話中處於編輯模式,SELECT會被阻塞。
儘管Oracle在其他會話正在修改時支持選擇一行(使用默認參數/無關鍵字),但SQL Server不會(具有默認參數/無關鍵字),所以看起來問題在於圖書館。
你期望這張表有多少總記錄?你有多少用戶在你的網站? – Nilish
現在我正在測試兩個用戶,並沒有。的記錄是13000.我的測試甚至在單次更新上失敗了,但我將鎖定7條記錄。 – bjan
如果你真的只用一個更新來鎖定**單行**,那麼第二次更新也只針對單行就可以正常工作。在你的SQL Server中肯定還有其他事情發生,或者你可能有錯誤的排序配置...... –