如何鎖定SQL Server中的表?我發現運行帶鎖的查詢,也讀取交易,但 困惑如何使用這些。如何鎖定SQL Server中的表
我有兩個進程先讀表,然後更新其中的數據。我只想要更新一個,並在其中讀取其他更新。我的方法的工作如下: -
- 鎖表
- 讀取數據
- 更新數據,如果它不被其他進程更新。
- 釋放鎖定。
感謝
如何鎖定SQL Server中的表?我發現運行帶鎖的查詢,也讀取交易,但 困惑如何使用這些。如何鎖定SQL Server中的表
我有兩個進程先讀表,然後更新其中的數據。我只想要更新一個,並在其中讀取其他更新。我的方法的工作如下: -
感謝
您可以使用TABLOCKX
提示鎖定整個表,但是鎖定整個表通常是一個壞主意,你可能要重新考慮,如果你真的需要它。
如果要確保更新最新數據,可以使用rowversion
列,並在更新之前進行雙重檢查,而不是鎖定整個表以進行讀取。
在您的select語句中,您可以提供「select for update」table hint:with (updlock)
。根據您正在更新的記錄百分比以及它們的物理分佈情況,這可能會比表鎖更好。
但正如Fedor Hajdu指出的那樣,你可能想要的是一種樂觀的鎖定方案。查看READ COMMITTED SNAPSHOT隔離級別的文檔。您可能也會發現這個article作爲介紹很有用。